HWND鼠标悬停时改变光标

HWND Change cursor when mouse Hover

本文关键字:改变 光标 悬停 鼠标 HWND      更新时间:2023-10-16

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

谢谢。

要显示与类的默认光标不同的光标,您需要为窗口处理WM_SETCURSOR消息并调用SetCursor以响应WM_SETCURSOR。一个简单的例子,请参见显示游标。

你需要子类化按钮来覆盖按钮的WndProc来处理WM_SETCURSOR。使用SetWindowSubclass来子类化窗口(然后在按钮被销毁时使用RemoveWindowSubclass删除子类,以响应WM_NCDESTROY -参见Raymond Chen的更安全的子类化了解详细信息)。SetWindowLongPtr不再被推荐用于子类化窗口。

感谢@IInspectable和@JonathanPotter提供关于SetWindowSubclass的信息。

我通过为所讨论的窗口处理WM_SETCURSOR并使用SetCursor来实现这一点。