在窗口客户端区域隐藏光标



我想隐藏光标在没有边界和标题栏的窗口客户端区域内(这是简单的opengl应用程序)。因此,函数

    ShowCursor(FALSE);

不合适。在搜索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);

这是解决这个典型任务的好方法吗?哪种方式是最好的?

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

if (Msg == WM_SETCURSOR && LOWORD(lParam) == HTCLIENT)
{
    SetCursor(NULL);
    return TRUE;
}
// Remainder of window procedure code

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

你正在使用的SetCursor()调用不接受BOOL值-它接受HCURSOR值。你调用SetCursor(NULL)它的意思是"隐藏那个光标"我发现在过去的Windows上,这是视频驱动的依赖,许多驱动程序不尊重它。处理这个问题的最一致的方法是在你的应用程序中创建一个透明的光标资源,并在主窗口的WM_SETCURSOR消息中返回该光标的句柄。

我发现首先将hCursor设置为NULL:

    wc.hCursor = NULL;

,然后将光标设置为NULL:

    SetCursor(NULL);

将使它消失。

从MSDN,我读到应用程序将默认设置自己的游标,如果一个没有在hCursor中定义。这就是第一行代码所做的。

然后,在应用程序设置了自己的游标之后,我在第二行代码中对它进行了修改。或者至少,我认为是这样的

最新更新