我的windowProc函数中的奇数条件语句行为

时间:2014-04-22 01:20:52

标签: c++ winapi conditional-statements

我遇到一个奇怪的问题,即交换机/案例将到达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);
}

1 个答案:

答案 0 :(得分:2)

message = WM_SHOWWINDOW

糟糕。


避免这种情况的一个好方法是使用 const

在代码上洒满了它。

这样做很实际。