是否可以获取鼠标光标更改的通知?我对在我的流程中引起的变化很感兴趣,但系统范围内的通知也一样好。由于我使用的是第三方库,因此可能有多种原因导致光标发生变化。
特别是,我想知道光标何时变为 IDC_HAND
。在线阅读,似乎没有通知驱动的方法。
我目前的解决方案是检查鼠标光标是否与 LoadCursor(nullptr, IDC_HAND)
相同。然而:
- 这会导致资源泄漏吗? documentation for
LoadCursor
表示如果资源已经存在,则返回对所述资源的引用而不是新资源。因此,我似乎不应该尝试释放 handle 。 - 由于
LoadCursor
会被多次调用,因此经常执行此检查的成本是否很高? - 我应该缓存
IDC_HAND
游标吗?如果我执行LoadCursor
时它不存在,那么当创建手形光标时,它是否必须具有相同的句柄?从我的测试来看,答案似乎是肯定的。
据我所知,理想的情况是有一条 Windows 消息指示光标更改,我可以在哪个阶段执行 LoadCursor
句柄检查。是否有其他选择?
感谢您的时间和帮助。
最佳答案
回复晚了,抱歉。基于 Raymond Chen 的反馈(非常感谢)和他的 post ,我只为 EVENT_OBJECT_NAMECHANGE
事件设置了一个 Hook (当鼠标光标改变时触发):
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)
{
...
}
}
关于c++ - 关于光标更改的通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28917667/