Мне нужно изменить значок курсора, когда мышь наводит на определенный 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
, Для краткого примера, см. Отображение курсора.
Вам нужно будет создать подкласс для кнопки, чтобы переопределить WndProc кнопки для обработки WM_SETCURSOR
, использование SetWindowSubclass
создать подкласс окна (а затем удалить подкласс с RemoveWindowSubclass
когда кнопка уничтожена, в ответ на WM_NCDESTROY
Рэймонда Чена Более безопасный подкласс для деталей). SetWindowLongPtr
больше не рекомендуется для подклассов Windows.
Спасибо @IInspectable и @JonathanPotter за информацию о SetWindowSubclass
,
Я достигаю этого, обрабатывая WM_SETCURSOR
для рассматриваемого окна и использования SetCursor
,