我想在没有边框和标题栏的窗口客户区中隐藏光标(它是简单的 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)
这是解决这个典型任务的好方法吗?什么方法最好?
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 可确保光标仅隐藏在客户区中,并且窗口框架和标题将使用正确的光标。