스위치/케이스가 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);
}
아들의 !!! 잘 했어, 친구. 나는 당신이 const에 대해 말하고있는 것을 본다. – Stradigos
아니면 'Yoda'관용구를 사용하고'WM_SHOWWINDOW == message'라고 쓸 수 있습니다. –