HWND鼠标悬停时更改光标

时间:2015-07-09 14:09:56

标签: c++ winapi cursor user32 hwnd

当鼠标悬停某个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

感谢。

2 个答案:

答案 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