MFC中重载OnOk()和OnCancle() 正常情况下 按回车和ESC键回进入到OnOk()和OnCancle()函数里面,但是为什么我重载了却没有,在按回车和ESC的时候不进入OnOk()和OnCancle()函数里面这是为什么呢?求各位大神指点……

解决方案 »

  1.   

    OnOK这个按钮的属性里设上return(好象是这么写的)属性,这是响应回车,OnCancle按钮的属性好象应该有一个CANCEL属性,如果有也设上试试
      

  2.   

    你按下回车和ESC和你重载这两个函数没关系啊,你必须要屏蔽这两个按键,因为对于MFC程序来说,按下回车和ESC,程序会默认退出,重载PreTranslateMessage函数
    BOOL CDlg::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: Add your specialized code here and/or call the base class
    if(pMsg->message==WM_KEYDOWN) 

    switch(pMsg->wParam)  
    {  
    case VK_RETURN:   //屏蔽Enter 
    return true;  
    case VK_ESCAPE:   //屏蔽Esc  
    return true;  

    }
    return CDialog::PreTranslateMessage(pMsg);
    }
      

  3.   

    case VK_RETURN:   //屏蔽Enter 
    onok();
    return true;  
    case VK_ESCAPE:   //屏蔽Esc  
    oncancel();
    return true;
      

  4.   

    你按ESC或者回车的时候  子对话框是不是有焦点呢?setfocus
      

  5.   

    重载后要把原来的函数中的CDialog::OnOK代码删除
      

  6.   

    mfc在按esc键的时候不是会调用OnClose()和OnCancle()函数吗?你这样屏蔽掉的话ESC和回车就不起作用了,我是想按ESC和回车能执行我自己设定的程序,我在以前的一个系统中这样重载都没出问题,不知道这次为什么重载后不起作用了。
      

  7.   

    回车可以直接定制,没必要与onok混在一起
      

  8.   

    看这篇文章
    http://blog.csdn.net/xiliang_pan/article/details/7069802
      

  9.   

    感谢 yi_river_love 的回复。问题解决了
      

  10.   

    解决方法是你可能漏掉了放置一个按钮控件并命名为IDOK的过程。
    步骤应该是:1、放置一个ID为IDOK的按钮,生成函数void CxxxxDlg::OnOK
    2、去掉或屏蔽里面的CDialog::OnOK();
    3、在资源视图里删掉按钮控件。