Стиль курсора не обновляется - PullRequest
5 голосов
/ 21 декабря 2010

У меня есть обычное приложение с графическим интерфейсом Windows (созданное с использованием API, а не MFC), и когда я перемещаю мышь и выключаю приложение, и мышь меняет стили (например, когда вы перемещаете ее за границу, она меняется на изменение размера). стрелка и т. д.) но иногда он «залипает» в этом стиле, так что я могу перемещать мышь, и она будет оставаться в виде стрелки изменения размера или чего-либо еще, даже после того, как она выйдет за границы окна. Это исправляет себя, если я перемещаю это по другому элементу управления.

Это просто неудобство, но выглядит непрофессионально, и я бы хотел это исправить. Как я могу сделать это там, где он постоянно обновляется?

Ответы [ 3 ]

9 голосов
/ 21 декабря 2010

Установите правильный дескриптор курсора при регистрации вашего класса окна.Смотри WNDCLASSEX::hCursor.Используйте LoadCursor для загрузки правильного курсора.Мол,

WNDCLASSEX wc = {0};
...
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
...
RegisterClassEx(&wc);
6 голосов
/ 22 декабря 2010

Тенфур ответ правильный. Вот еще немного фона.

Когда мышь перемещается в пределах окна, и она не захвачена, окно получит сообщение WM_SETCURSOR. Название сообщения может быть немного запутанным. Это в основном возможность окна установить курсор, а не инструкция для установки курсора.

Окно может обработать это сообщение, вызвав SetCursor и вернувшись.

Окно также можно открыть, передав сообщение DefWindowProc, чтобы получить поведение по умолчанию. Поведение по умолчанию - смотреть на поле hCursor в WNDCLASS окна. Вот почему ответ Тенфура работает.

(На самом деле все немного сложнее, поскольку DefWindowProc сначала дает родительскому окну шанс вмешаться.)

Если вы хотите сделать что-то динамическое, например, выбрать курсор в зависимости от некоторой переменной состояния, тогда вам нужно обработать WM_SETCURSOR, чтобы он вызывал SetCursor с любым подходящим курсором и затем возвращал TRUE.

Подробнее см. SetCursor.

1 голос
/ 30 января 2011

Дополнительная информация: http://msdn.microsoft.com/en-us/library/gg153552(VS.85).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...