我需要在鼠标悬停在某个 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
。有关简短示例,请参阅 Displaying a Cursor .
您需要子类化按钮以覆盖按钮的 WndProc 以处理 WM_SETCURSOR
。使用 SetWindowSubclass
对窗口进行子类化(然后在销毁按钮时用 RemoveWindowSubclass
删除子类化,以响应 WM_NCDESTROY
——详情请参阅 Raymond Chen 的 Safer subclassing)。 SetWindowLongPtr
不再推荐用于子类化窗口。
感谢@IInspectable 和@JonathanPotter 提供有关SetWindowSubclass
的信息。
关于c++ - HWND 鼠标悬停时改变光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31320016/