Можно ли получать уведомления об изменениях курсора мыши? Я заинтересован в изменениях, вызванных в моем процессе, но системное уведомление было бы столь же хорошим. Поскольку я использую сторонние библиотеки, может быть несколько причин для изменения курсора.Уведомления о изменениях курсора
В частности, я хотел бы знать, когда курсор становится IDC_HAND
. При чтении в Интернете, похоже, для этого не существует ориентированного на уведомление подхода.
Мое текущее решение - проверить, совпадает ли указатель мыши с LoadCursor(nullptr, IDC_HAND)
. Однако:
- Может ли это вызвать утечки ресурсов? documentation для
LoadCursor
указывает, что если ресурс уже существует, тогда ссылка на указанный ресурс возвращается вместо нового ресурса. Поэтому кажется, что я не должен пытаться выпустить ручку. - Стоит ли часто выполнять эту проверку, так как
LoadCursor
будет называться много раз? - Должен ли я кэшировать курсор
IDC_HAND
? Если он не существует, когда я выполняюLoadCursor
, когда создается ручной курсор, обязательно ли он будет иметь тот же самый дескриптор? Из моих тестов ответы кажутся «да».
Насколько я могу судить, идеальным сценарием является то, что есть сообщение Windows, указывающее изменение курсора, на каком этапе я мог выполнить проверку дескриптора LoadCursor
. Есть ли альтернативы?
Спасибо за ваше время и помощь.
Вы можете использовать [обход] (http://research.microsoft.com/en-us/projects/detours/) для подключения ['SetCursor()'] (https://msdn.microsoft .com/en-us/library/windows/desktop/ms648393.aspx). –
Система загружает IDC_HAND при запуске, поэтому ваш вызов будет просто получать ссылку на существующий курсор. Чтобы получать уведомления при изменении курсора, используйте доступность. Найдите изменения в 'OBJID_CURSOR'. –
Ага, это дубликат [Захват события изменения формы указателя мыши в MFC] (http://stackoverflow.com/questions/10100769/capturing-mouse-pointer-shape-change-event-in-mfc) –