我遇到一个奇怪的问题,即交换机/案例将到达HandleEvent,但该消息无法到达相应的IF语句。
例如,使用HandleEvent,当我点击红色X时,我的窗口不会关闭。消息将是WM_CLOSE(我已选中),但由于某种原因,if语句未被处理正确。
起初我以为WM_CLOSE的情况从未到过,但如果我注释掉其他情况,它仍然无法正常工作。但是,如果我取出WM_ACTIVATEAPP和WM_SHOWWINDOW的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);
}
答案 0 :(得分:2)
message = WM_SHOWWINDOW
糟糕。
避免这种情况的一个好方法是使用 const
。
在代码上洒满了它。
这样做很实际。