下面是一个WS_POPUP
窗口,该过程始终在HTCLIENT
上返回WM_NCHITTEST
。每当光标进入窗口时,它就会变成等待的光标(蓝色磁盘)。例如,当我返回HTNOWHERE
时,不会发生这种情况。
#define UNICODE
#include <windows.h>
LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT uMsg, WPARAM wp, LPARAM lp){
switch(uMsg){
case WM_NCHITTEST: return HTCLIENT;
default: return DefWindowProc(hWnd, uMsg, wp, lp);
}
}
int main(void){
WNDCLASSEX wcx = {};
wcx.cbSize = sizeof(WNDCLASSEX);
wcx.lpfnWndProc = WindowProcedure;
wcx.hbrBackground = CreateSolidBrush(RGB(0, 0, 0));
wcx.lpszClassName = L"Win32Class";
RegisterClassEx(&wcx);
HWND hWnd = CreateWindowEx(WS_EX_APPWINDOW, wcx.lpszClassName, L"Title",
WS_POPUP, 150, 150, 512, 256, NULL, NULL, NULL, NULL);
ShowWindow(hWnd, 1);
MSG msg; while(GetMessage(&msg, NULL, 0, 0)){
DispatchMessage(&msg);
}
}
答案 0 :(得分:0)
注册窗口类时没有设置类光标,也没有处理WM_SETCURSOR
。文档解释了为什么这是一个问题:
WNDCLASSEX.hCursor :
类光标的句柄。该成员必须是游标资源的句柄。 如果此成员为NULL,则每当鼠标移至应用程序窗口时,应用程序必须显式设置光标形状。
WM_SETCURSOR :
DefWindowProc函数还使用此消息将光标设置为箭头(如果不在客户区域中),或者将其设置为已注册的类光标(如果其不在客户区域中)。