在我的程序中写了CXX::OnOK()和CXX::OnCancel()的空函数,来屏蔽Enter按键和Esc按键后会退出程序,但是遇到2个问题:1.按下程序右上的小X也不能退出程序.
2.我的程序界面上有一个编辑框,和一个"确定"按钮,希望在编辑框中输入后按键盘上的"Enter"就相当于按下"确定"万分感谢.

解决方案 »

  1.   

    在ONOK、ONCLOSE函数里不调用父类的ONOK或是ONCANCEL函数就可以了,一般来说父类是CDIALOG类,父类的这个函数里会关闭对话框,通常是ONCLOSE函数。
    不过这样做会出现什么别的副作用就不清楚了。
      

  2.   

    建议不要重载OnOK和OnCancel
    按下程序右上的小X就是OnCancel
    按确定就是OnOK在PreTranslateMessage屏蔽掉esc和对enter做特殊处理比较好,我个人觉得哦
      

  3.   

    void CXXDlg::OnClose() 
    {
        EndDialog(IDCANCEL);
    }
      

  4.   

    1。POSTMESSAGE(WM_CLOSE)
    2.EDIT支持Enter,当输入Enter时OnOK()或者POSTMESSAGE(WM_CLOSE)
      

  5.   

    对话框的“最大化”,“最小化”你可以处理OnSysCommandvoid CSMSTableDlg::OnSysCommand(UINT nID, LPARAM lParam)
    {
    int i; switch(nID)
    {
    case 61536:
    if (MessageBox("确定要退出此软件?", "短信游戏系统",MB_YESNO|MB_ICONQUESTION) == IDNO)
    {
    return;
    }
    theApp.m_db.DisConnectDb();
    if (theApp.m_NOMachine)
    {}
    else
    {
    GetDlgItem(IDC_INFO)->SetWindowText("正在关闭数据库和所有端口,请等待...");
    // 检查那些端口被打开
    for (i=0; i<8; i++)
    {
    theApp.m_mobile[i].CloseComm();
    if (theApp.iThreadIndex[i] != -1)
    theApp.m_Page[theApp.iThreadIndex[i]].EndThread();
    }
    }
    CDialogResize::OnCancel(); break;
    default:
    CDialog::OnSysCommand(nID, lParam);
    break;
    }
    }
      

  6.   

    重载WM_SYSCOMMAND,如果是SC_CLOSE的时候关闭对话框
      

  7.   

    OnOK和OnCancel
    是虚函数.要修改其功能要重载它们,但是其默认在ONOK、ONCLOSE函数里调用父类的ONOK或是ONCANCEL函数.要达到自己的要求要重写它们,并且不调用父类的ONOK或是ONCANCEL函数
      

  8.   

    重载对话框的PreTranslateMessage()函数,在这个函数中处理消息
    如:
    BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
    {
    if(pMsg->message==WM_KEYDOWN)
    {
    switch(pMsg->wParam)
    {
    case 0x0d:
    pMsg->wParam=VK_TAB;
    break;
    case VK_ESCAPE:
    return;
    break;
    }
    }

    return CXXXDlg::PreTranslateMessage(pMsg);
    }
      

  9.   

    第二个问题,把确定按钮设置Default button 属性