最近做一个对话框的程序,对话框中包含两个ListBox,并且在启动对话框的时候自动载入若干从文件中读取的列表项,可是在打开对话框串口后,按ESC键,窗口没有关闭反而是其中的一个ListBox被清空了,不知道是什么原因.另外,程序只重载了一个与ESC按键无关的VK_RETURN事件在PreTranslateMessage中.

解决方案 »

  1.   

    问题就在你重载那里~记住:Nonzero if the message was translated and should not be dispatched; 0 if the message was not translated and should be dispatched.
      

  2.   

    BOOL CTestDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(GetFocus() && GetFocus()->m_hWnd != GetDlgItem(IDC_EDIT)->m_hWnd)
    {
    if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
    {
    NextDlgCtrl();
    return TRUE;
    }
    } return CDialog::PreTranslateMessage(pMsg);
    }重载的代码只是为了使窗口响应enter事件,就是这样.
      

  3.   

    因为这个事件被CEdit捕获了。如果你想达到你要的效果(关闭对话框),自己重载CEdit::PretranslateMessage,改变它的行为即可。
      

  4.   

    原来是因为CEdit的原因,多谢大家帮忙!
    if(pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE)
    {
    OnClose();
    return TRUE;
    }
    我在判断的前边拦截了一下VK_ESCAPE,这样就可以了.