2011-08-17 2 views
2

사용자 지정 대화 상자에 특수 메시지 루프를 사용하고 있습니다. 대화 상자가 열려 있고 창을 닫을 때 (msg.message == WM_CLOSE) 다음 두 번째 경우에 도달하고 싶습니다.모달 메시지 루프에서 WM_CLOSE

for(;;) 
{ 
    if(PeekMessage(&msg, 0, 0, 0, PM_NOREMOVE)) 
    { 
     if(msg.message == WM_CLOSE) 
     { 
      GetMessage(&msg, 0, 0, 0); 
      break; 
     } 

     else 
     { 
      if(GetMessage(&msg, 0, 0, 0)) 
      { 
       TranslateMessage(&msg); 
       DispatchMessage(&msg); 
      } 

      if(msg.message == msgEnd) 
       break; 
     } 
    } 

문제는이 코드에 도달하지 못했습니다. 루프에 문제가 있었는지 확인하기 위해 WM_CLOSE를 다른 메시지로 바꾸려고했지만 다른 메시지는 정상적으로 작동했습니다. 뭐가 문제 야?

답변

3

WM_CLOSE가 전송되고 다른 메시지가 게시 된 것으로 보입니다.

GetMessagePeekMessage은 게시 된 메시지 (PostMessage과 함께 게시 된 메시지)에서만 작동합니다. 메시지가 게시되지 않고 SendMessage을 통해 전송 된 경우 즉시 PeekMessage 또는 GetMessage 안에 처리되므로 MSG 구조체를 가져올 수 없습니다.

+1

메시지를 보내는 시간을 확인하고 그 안에 코드를 실행하는 방법이 있습니까? 대화 상자가 열려 있고 창이 닫히는 상황을 처리 할 방법이 필요합니다. – Karl

+0

대상 윈도우의 WindowProc 또는 CallWindowProc 훅에서. 너 뭐하려고? – hamstergene

+0

'InSendMessage' 또는'InSendMessageEx'를 사용하여 메시지가 보내지거나 게시되었는지 확인할 수 있습니다. – Ajay

관련 문제