현재 Windows XP 용 C++ 응용 프로그램과 같은 게임 내에서 마우스 커서를 변경하면임이 발생합니다.PeekMessage() 마우스 커서 재설정
커서를 변경하려면 SetCursor()
을 사용하고 작동중인 원하는 커서를 전달하십시오. 그러나 while 루프 중에 PeekMessage()
을 호출하면 커서가 기본 화살표로 다시 재설정됩니다.
이
는 잘못된 루프 : 나는 커서가PeekMessage()
에 통화 중에 변경된 것을 발견 디버깅하는 동안
MSG msg;
while(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
하는 msg.message 메시지 이들 중 하나해야 ==을 0x200, 후 :
WM_MOUSEFIRST = 0x200
WM_MOUSEMOVE = 0x200
왜 이런 일이 발생했는지에 대한 정보를 찾을 수 없었으며 Windows 메시지에 익숙하지 않았습니다.
감사합니다.
편집 :
는 here에 따르면이 시스템은 효과적으로 다시 기본 커서를 설정, 매번 마우스 움직임을 클래스 커서를 다시 그립니다. 이를 염두에두고 윈도우 메시지 콜백 함수에 다음을 추가했습니다.
case WM_SETCURSOR:
return 0;
문제가 해결되었습니다.
디버깅을 위해서만 키보드를 사용하고있었습니다. 응용 프로그램 창 위에 마우스가 남아 있습니다. 따라서 코드를 단계별로 실행하면서 변경된 사항을보고 볼 수있었습니다. – 0xC0DEFACE
나는 그것이 신뢰할 수 있다고 생각하지 않는다. 디버거는 여전히 포인터에 영향을줍니다. 디버깅하지 않고 응용 프로그램을 실행하면 어떻게됩니까? 그렇다면 그것은 작동하지 않습니까? – wallyk
그것은 여전히 발생합니다. 메시지 루프 이후에 응용 프로그램을 시스템 ("일시 중지")하면 커서가 변경된 것을 볼 수 있습니다. 따라서 특정 메시지가 올바르지 않을 수도 있지만 여전히 어딘가에서 일어나야합니다. – 0xC0DEFACE