我希望在没有边框和标题栏的窗口客户区内隐藏光标(这是简单的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);
这是解决这一典型任务的好方法吗?什么方式最好?
答案 0 :(得分:4)
MSDN说您可以将WNDCLASSEX hCursor字段设置为NULL,在这种情况下,您必须在窗口过程中显式设置光标(这意味着处理WM_SETCURSOR消息)。例如:
if (Msg == WM_SETCURSOR && LOWORD(lParam) == HTCLIENT)
{
SetCursor(NULL);
return TRUE;
}
// Remainder of window procedure code
检查HTCLIENT可确保光标仅隐藏在客户区,并且窗口框和标题将使用正确的光标。
答案 1 :(得分:0)
你正在使用的SetCursor()调用不带BOOL - 它需要一个HCURSOR。所以你正在调用SetCursor(NULL),这意味着“隐藏光标”。我在Windows上发现的东西是依赖于视频驱动程序,许多驱动程序都不尊重它。处理此问题的最一致方法是在应用程序中创建透明的游标资源,并在主窗口的WM_SETCURSOR消息中返回该游标的句柄。
答案 2 :(得分:0)
我发现首先将 hCursor
设置为 NULL
:
wc.hCursor = NULL;
然后将光标设置为NULL
:
SetCursor(NULL);
会让它消失。
我从 MSDN 上了解到,如果 hCursor
中未定义光标,应用程序将默认设置自己的光标。这就是第一行代码的作用。
然后,在应用程序设置了自己的光标后,我用第二行代码把它弄乱了。或者至少,我认为这就是会发生的事情。