3

我创建了一个无边框窗口,它使用一个强制返回的wndProc()函数,它允许用户拖动窗口,无论他的光标位于何处。 问题是我已经设置了一个自定义光标,但是使用上述方法,光标总是设置回. 我该如何解决? 编辑:我也试过在 中使用,但没有用。WM_NCHITTEST caseHTCAPTION;
IDC_ARROW


SetCursor()WM_NCHITTEST case

4

3 回答 3

3

您可以使用 WM_SETCURSOR 消息来覆盖光标。lParam 的 LOWORD 表示命中测试代码,即您使用 WM_NCHITTEST 处理程序更改的代码。这很好用:

static HCURSOR CustomCursor;

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_NCHITTEST: {
        LRESULT result = DefWindowProc(hWnd, message, wParam, lParam);
        if (result == HTCLIENT) result = HTCAPTION;             
        return result;
    }
    case WM_SETCURSOR: 
        if (LOWORD(lParam) == HTCAPTION) {
            SetCursor(CustomCursor);
            return TRUE;
        }
        return DefWindowProc(hWnd, message, wParam, lParam);
    // etc...
}

在您的窗口初始化中初始化 CustomCursor。说:

CustomCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_SIZEALL));
于 2013-01-21T00:28:15.973 回答
0

通常设置游标的正确方法是响应WM_SETCURSOR消息。(另见http://blogs.msdn.com/b/oldnewthing/archive/2005/05/25/421707.aspx

但是,如果您正在处理捕获鼠标的鼠标拖动,您的窗口将不会收到WM_SETCURSOR消息,我认为唯一的选择是在WM_MOUSEMOVE这种情况下在处理程序中设置光标。

于 2012-11-18T10:04:04.850 回答
0

除了SetCursorin WM_NCHITTESTtry to SetCursorinWM_SETCURSOR太。

于 2012-11-18T09:50:33.463 回答