建立了一个基于对话框的应用程,当我把焦点移到Edit Box控件上,然后按回车以后,程序自动退出了。后来我试着把焦点移到List Box控件上,然后回车,也会出现这种现象。不过当我把焦点移到自定义的Button控件上,按回车后,程序却没有退出,而是响应了相应的按钮消息。这是为什么呢?难道在基于对话框的应用程中,除了Button控件外,其它所有的通用控件都有默认的消息处理函数去响应回车键盘消息吗?

解决方案 »

  1.   

    简单的方法是:
    void CMyDlg::OnOK() 
    {
    // CDialog::OnOK();
    }
      

  2.   

    对话的回车默认处理函数就是楼上说的
    或者直接屏蔽回车
    屏蔽回车
    BOOL CCXXX::PreTranslateMessage(MSG* pMsg)
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_RETURN://屏蔽回车
                return TRUE;
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  3.   

    CDialog 有个默认的 OnOK函数,对应的默认按键为回车键,所以你按回车键后,它就自动以OnOK来处理这个事件,可以通过在OnPretranslateMessage()函数中屏蔽回车键,改为你需要的功能。BOOL CCXXX::PreTranslateMessage(MSG* pMsg)
    {
        if(pMsg->message == WM_KEYDOWN)
        {
            switch(pMsg->wParam)
            {
            case VK_RETURN://屏蔽回车
                return TRUE;
            case VK_ESCAPE://屏蔽Esc
                return TRUE;
            }
        }
        return CDialog::PreTranslateMessage(pMsg);
    }
      

  4.   

    谢谢上面几位的指点,那个问题已经解决了。(由于我不想完全屏蔽回车消息,故选择了重载OnOk()函数的方法)
    不过后来我新建了一个多文档的应用程序,通过菜单来打开一个自定义的对话框,这里也存在上面的问题,于是我也重载了OnOk()函数,但是此时为什么又出现对话框消失的问题了,这又是为什么呢?我觉得没有道理。后来我打断点跟踪调试,发现是CDialog类的OnOk()响应了回车键消息,为什么不是自定义的对话框类的OnOk()函数?