static HWND btn;
HCURSOR cursor = LoadCursor(0, IDC_CROSS);
case WM_CREATE:
btn = CreateWindow(TEXT("BUTTON"), TEXT("Press Me"),
WS_CHILD|WS_VISIBLE, 50, 50, 80, 30,
hwnd, (HMENU) 111, NULL, NULL);
现在,在 WM_COMMAND
中,我尝试使用:
SendMessage(btn, WM_SETCURSOR, 0, (LPARAM) cursor);
这是行不通的。
那么如何在点击按钮后改变鼠标的光标呢?另外,当鼠标悬停在按钮上时如何更改鼠标光标(就像在网络浏览器中将鼠标悬停在链接上时它会变成一只手一样)?
最佳答案
使用此代码更改单个控件的光标:
SetClassLong(btn, GCL_HCURSOR, (LONG)cursor);
为实现 64 位兼容性,首选方法是:
SetClassLongPtr(btn, GCL_HCURSOR, (LONG_PTR)cursor);
请注意,这不会仅为指定的 btn
窗口更改图标,但对于具有相同类的所有窗口,您必须首先使用 RegisterClass() 注册一个自定义类名
,然后在创建btn
时在WNDCLASS.lpszClassName
结构体中使用。
同样,这将适用于具有该(自定义)类的所有 Windows。要更改单个特定窗口的光标,您需要对其进行子类化,管理 WM_SETCURSOR
消息,如果(例如)lParam
是 HTCLIENT
(指针进入窗口客户区)然后调用 SetCursor()
来设置你想要的光标(在这种情况下不要忘记返回 TRUE
)。当然,这可能是暂时的(使用 GWLP_WNDPROC
调用 SetWindowLongPtr()
)。
关于c - 如何更改按钮上的光标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10277966/