是否可以获得鼠标光标更改的通知?我对我的流程中发生的变化感兴趣,但系统范围的通知也同样好。由于我使用的是第三方库,因此光标可能有多种原因需要更改。
特别是,我想知道光标何时变为IDC_HAND
。在线阅读,似乎并不是一种通知驱动的方法。
我目前的解决方案是检查鼠标光标是否与LoadCursor(nullptr, IDC_HAND)
相同。但是:
LoadCursor
的{{3}}表示如果资源已经存在,则返回对所述资源的引用而不是新资源。因此,我似乎不应该试图释放句柄。LoadCursor
会被多次调用?IDC_HAND
光标吗?如果在执行LoadCursor
时它不存在,则在创建手形光标时,它是否必须具有相同的句柄?根据我的测试,答案似乎是肯定的。据我所知,理想情况是有一条Windows消息指示游标在我可以执行LoadCursor
句柄检查的阶段发生变化。是否有替代方案?
感谢您的时间和帮助。
答案 0 :(得分:0)
迟到的回复,道歉。根据Raymond Chen的反馈(谢谢你)和他的post,我为EVENT_OBJECT_NAMECHANGE
事件设置了一个钩子(当鼠标光标改变时触发):
SetWinEventHook(EVENT_OBJECT_NAMECHANGE, EVENT_OBJECT_NAMECHANGE, nullptr, WinEventProc, GetCurrentProcessId(), GetCurrentThreadId(), WINEVENT_INCONTEXT);
并听取了OBJID_CURSOR
对象ID:
void CALLBACK WinEventProc(
HWINEVENTHOOK hWinEventHook,
DWORD event,
HWND hwnd,
LONG idObject,
LONG idChild,
DWORD dwEventThread,
DWORD dwmsEventTime
)
{
if (idObject == OBJID_CURSOR)
{
...
}
}