WinApi,将光标隐藏在窗口客户区中

And*_*390 2 winapi

我想在没有边框和标题栏的窗口客户区中隐藏光标(它是简单的 opengl 应用程序)。所以,函数

    ShowCursor(FALSE);
Run Code Online (Sandbox Code Playgroud)

不合适。经过一番搜索winapi,我找到了这个解决方案:

    //when create window class for application window
    WNDCLASSEX WndClass;
    //...
    BYTE CursorMaskAND[] = { 0xFF };
    BYTE CursorMaskXOR[] = { 0x00 };
    WndClass.hCursor = CreateCursor(NULL, 0,0,1,1, CursorMaskAND, CursorMaskXOR);
Run Code Online (Sandbox Code Playgroud)

这是解决这个典型任务的好方法吗?什么方法最好?

djh*_*man 5

MSDN 说您可以将 WNDCLASSEX hCursor 字段设置为 NULL,在这种情况下,您必须在窗口过程中显式设置光标(这意味着处理 WM_SETCURSOR 消息)。例如:

if (Msg == WM_SETCURSOR && LOWORD(lParam) == HTCLIENT)
{
    SetCursor(NULL);

    return TRUE;
}

// Remainder of window procedure code
Run Code Online (Sandbox Code Playgroud)

检查 HTCLIENT 可确保光标仅隐藏在客户区中,并且窗口框架和标题将使用正确的光标。