HWND 鼠标悬停时改变光标

HWND Change cursor when mouse Hover

我需要在鼠标悬停在某个 HWND 上时更改光标图标。我用

实现了鼠标光标的变化
SetClassLong(hWindow, GCL_HCURSOR, (LONG)LoadCursor (NULL, IDC_CROSS));

但是它将光标应用于与指定 HWND 共享相同 class 的每个元素。例如,在我的例子中,HWND 是一个 Button 元素,它的 class 是 "Button",所以我的 window 中的所有按钮都将具有相同的光标。我怎样才能将光标更改为指定的 HWND?像这样:

SetHwndCursor(hWindow, GCL_CURSOR, Cursor); //Invented function, just to make the example

谢谢。

要显示与 class 的默认光标不同的光标,您需要处理 WM_SETCURSOR message for the window and call SetCursor in response to WM_SETCURSOR. For a brief example, see Displaying a Cursor

您需要子class 按钮来覆盖按钮的 WndProc 以处理 WM_SETCURSOR。不再推荐使用 SetWindowSubclass to subclass the window (and then remove the subclassing with RemoveWindowSubclass when the button is destroyed, in response to WM_NCDESTROY—see Raymond Chen's Safer subclassing for details). SetWindowLongPtr 用于 subclassing windows.

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

我通过为有问题的 window 处理 WM_SETCURSOR 并使用 SetCursor.

来完成此操作