PeekMessage () Сброс курсора мыши - PullRequest
1 голос
/ 04 декабря 2009

В настоящее время я возиться с изменением курсора мыши в игре, подобной приложению C ++ для Windows XP.

Для изменения курсора я использую SetCursor() и передаю нужный курсор, который работает. Однако в течение цикла while, в котором вызывается PeekMessage(), курсор продолжает возвращаться к стрелке по умолчанию.

Это неправильный цикл:

MSG  msg;
while( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
    TranslateMessage( &msg );
    DispatchMessage( &msg );
}

Во время отладки я обнаружил, что курсор изменился во время вызова на PeekMessage(), после чего msg.message == 0x200, что должно сделать сообщение одним из следующих:

WM_MOUSEFIRST = 0x200
WM_MOUSEMOVE = 0x200

Я не смог найти никакой информации о том, почему это происходит, и не имею опыта работы с сообщениями Windows.

Спасибо.

Edit:

Согласно здесь система перерисовывает курсор класса при каждом перемещении мыши, фактически возвращая ему курсор по умолчанию. Имея это в виду, я добавил это к функции обратного вызова сообщения окна:

case WM_SETCURSOR:
    return 0;

проблема решена.

1 Ответ

0 голосов
/ 04 декабря 2009

Как вы это отладили? Если вы не используете SoftIce или какое-либо другое приложение, которое не использует указатель мыши Windows, было бы сложно изолировать отладчик от приложения.

...