В настоящее время я возиться с изменением курсора мыши в игре, подобной приложению 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;
проблема решена.