C++ HWND鼠标悬停时更改光标

C++ HWND鼠标悬停时更改光标,c++,winapi,cursor,user32,hwnd,C++,Winapi,Cursor,User32,Hwnd,当鼠标悬停在某个HWND上时,我需要更改光标图标。我用鼠标实现了光标的改变 SetClassLong(hWindow, GCL_HCURSOR, (LONG)LoadCursor (NULL, IDC_CROSS)); 但它将游标应用于与指定HWND共享同一类的每个元素。例如,在我的例子中,HWND是一个Button元素,它的类是“Button”,因此我窗口中的所有按钮都将具有相同的光标。如何将光标更改为指定的HWND?大概是这样的: SetHwndCursor(hWindow, GCL_CU

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

谢谢。

要显示与类的默认光标不同的光标,您需要处理窗口的消息并调用
SetCursor
以响应
WM\u SetCursor
。有关简要示例,请参见

您需要对按钮进行子类化,以覆盖按钮的WndProc来处理
WM_SETCURSOR
。用于对窗口进行子类化(然后在按钮被销毁时移除子类化,以响应
WM\NCDESTROY
-有关详细信息,请参阅Raymond Chen的)。不再建议子类化windows


感谢@IInspectable和@JonathanPotter提供了有关
SetWindowsSubclass

的信息,我通过为相关窗口处理
WM\u SETCURSOR
来完成这一任务,并使用
SETCURSOR

SETCURSOR更改全局光标,而不是本机应用于某个元素,我错了吗?谢谢。鼠标一移动,它所在的窗口就可以/将其设置为它想要的。。。包括应用程序不拥有的窗口。实际上,它只适用于某个元素。描述使用旧的子类方法(
SetWindowLongPtr
)的缺点,并解释正确的方法。所有现代系统都有comctl32.dll版本6。任何人都不应该再以Windows98为目标编写程序了。无论如何,在5.8中添加了
SetWindowSubclass