c++ - HWND 鼠标悬停时改变光标

标签 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

谢谢。

最佳答案

要显示不同于类默认光标的光标,您需要处理 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/

相关文章:

c++ - 如何获取身份验证类型(如 WindowsIdentity.AuthenticationType 属性)

C#在拖动操作期间检测桌面文件夹鼠标?

sql - T-SQL:带有表和列参数的游标

sql-server - 如何使SQL输出游标进入Delphi数据组件?

c++ - 为什么 npm install ffi 返回错误。使用 Node 版本 12

c++ - 在 C++ 中使用第二个索引数组对数组进行排序

java - 调用winapi函数后清空缓冲区

由 c# zedgraph : how to use the cursor property?

c++ - 为什么同一内核(超线程)中的两个线程比两个内核的 L1 写访问权限更差?

c++ - OpenProcess 函数返回无效句柄