当鼠标悬停某个HWND时,我需要更改光标图标。我用
实现了鼠标光标的变化SetClassLong(hWindow, GCL_HCURSOR, (LONG)LoadCursor (NULL, IDC_CROSS));
但它将光标应用于与指定HWND共享同一类的每个元素。例如,在我的例子中,HWND是一个Button元素,它的类是" Button",所以我窗口中的所有按钮都有相同的光标。如何才能将光标更改为指定的HWND?像这样:
SetHwndCursor(hWindow, GCL_CURSOR, Cursor); //Invented function, just to make the example
感谢。
答案 0 :(得分:3)
要显示与班级默认光标不同的光标,您需要处理窗口的WM_SETCURSOR
消息,并呼叫SetCursor
以响应WM_SETCURSOR
。有关简短示例,请参阅Displaying a Cursor。
您需要对按钮进行子类化以覆盖按钮的WndProc以处理WM_SETCURSOR
。使用SetWindowSubclass
对窗口进行子类化(然后在按钮被销毁时使用RemoveWindowSubclass
删除子类,以响应WM_NCDESTROY
- 请参阅Raymond Chen的Safer subclassing细节)。不再推荐使用SetWindowLongPtr
来进行子类化。
感谢@IInspectable和@JonathanPotter提供有关SetWindowSubclass
的信息。
答案 1 :(得分:2)
我通过处理相关窗口的WM_SETCURSOR
来完成此操作并使用SetCursor
。