2009-12-04 8 views
1

현재 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; 

문제가 해결되었습니다.

답변

0

어떻게 디버깅을하셨습니까? SoftIce 또는 Windows 마우스 포인터를 공유하지 않는 다른 응용 프로그램을 사용하지 않는 한 응용 프로그램에서 디버거를 분리하는 것이 어려울 수 있습니다.

+0

디버깅을 위해서만 키보드를 사용하고있었습니다. 응용 프로그램 창 위에 마우스가 남아 있습니다. 따라서 코드를 단계별로 실행하면서 변경된 사항을보고 볼 수있었습니다. – 0xC0DEFACE

+0

나는 그것이 신뢰할 수 있다고 생각하지 않는다. 디버거는 여전히 포인터에 영향을줍니다. 디버깅하지 않고 응용 프로그램을 실행하면 어떻게됩니까? 그렇다면 그것은 작동하지 않습니까? – wallyk

+0

그것은 여전히 ​​발생합니다. 메시지 루프 이후에 응용 프로그램을 시스템 ("일시 중지")하면 커서가 변경된 것을 볼 수 있습니다. 따라서 특정 메시지가 올바르지 않을 수도 있지만 여전히 어딘가에서 일어나야합니다. – 0xC0DEFACE

관련 문제