2014-04-22 2 views
0

스위치/케이스가 HandleEvent에 도달하지만 메시지가 해당 IF 문에 도달하지 않는 이상한 문제가 있습니다.내 windowProc 함수에서 이상한 조건문 동작

예를 들어, HandleEvent를 그대로 사용하면 빨간색 X를 눌렀을 때 내 창이 닫히지 않습니다. 메시지에 WM_CLOSE (확인 됨)가 표시되지만 if 문이 올바르게 처리되지 않습니다.

처음 엔 WM_CLOSE 케이스에 도달하지 못했을 것이라고 생각했지만, 다른 케이스를 주석 처리하면 여전히 작동하지 않습니다. 그러나 WM_ACTIVATEAPP 및 WM_SHOWWINDOW에 대한 IF 문을 제거하면 올바른 문이 실행됩니다. 내가 "else if"를 제거하고 그것들을 규칙적으로 만들지 만 그것도 작동하지 않습니다. 올바른 IF 문이 아닌 이유는 무엇입니까? 그 메시지는 그 메시지입니다. 나는 이해하지 못한다. ... 맞은 편에 도달해야한다!

LRESULT CALLBACK foo::WindowProc(HWND window, UINT message, WPARAM wparam, LPARAM lparam) { 

switch(message) { 
    case WM_ACTIVATEAPP: 
    case WM_SHOWWINDOW: 
    case WM_CLOSE: 
       // Test for window 
     if ((window == fooWindow) && (foo->HandleEvent(message, wparam, lparam))) 
     { 
      return (0); 
     } 

     break; 
    } 

    return DefWindowProcW(window, message, wparam, lparam); 
}  

bool foo::HandleEvent(UINT message, WPARAM wparam, LPARAM lparam) { 

    if (message == WM_ACTIVATEAPP) { 
     if (wparam) 
     { 
      // Stuff 
      ShowWindow(fooWindow, SW_RESTORE); 
     } else { 
      // Stuff 
      ShowWindow(fooWindow, SW_MINIMIZE); 
     } 
    } else if (message = WM_SHOWWINDOW) { 
     if (wparam) 
      // Stuff 
     else 
      // Stuff 
    } else if (message == WM_CLOSE) { 
     // Stuff 
    } 

    return (true); 
} 

답변

2
message = WM_SHOWWINDOW 

죄송합니다.


이를 방지하는 좋은 방법은 const을 사용하는 것입니다.

코드 전체에 자유롭게 뿌리십시오.

실용적인 부분.

+0

아들의 !!! 잘 했어, 친구. 나는 당신이 const에 대해 말하고있는 것을 본다. – Stradigos

+0

아니면 'Yoda'관용구를 사용하고'WM_SHOWWINDOW == message'라고 쓸 수 있습니다. –