none
VC++中的EDIT控件回车问题 RRS feed

  • 问题

  •  

    在基于对话框的MFC中添加一个EDIT控件,在里面输入后按回车想让它执行代码,但默认的是在EDIT中输入完后按回车会关掉程序,怎么解决这个问题,请达人们给个解决方法,越详细越好
    2008年3月21日 2:06

答案

  • 方法:屏蔽回车键,在PreTranslateMessage消息中做如下的处理,

     

    if(VK_RETURN == pMsg->wParam) return TRUE;

     

    就可以解决回车关闭的问题了!!
       

    2008年3月26日 11:44

全部回复

  • 你好:
    根据我浅薄的经验,我想和你一起探讨一下问题的所在。
      首先,我先来分析一下造成这个结果的原因。基于对话框的程序会自动创建一个对话框,上面有一个“OK"按钮(当然,这个根据你选择的版本不同),这个按钮是”默认按钮“,也就是说,无论你当前的焦点在哪里,按下回车都等于按下了这个”默认按钮“。而这个默认按钮有一个默认的事件响应函数(如果你没有改写这个函数的话)——OnOK(),这个函数会什么也不会做,除了关闭这个程序。所以无论在你按下回车的时候,对话框就消失了,同时程序也终止了。
      如果实际情况确实如我所说的话,请继续看下面的内容:
    解决方法之一:
      取消OK按钮的”默认“属性,并调整EDIT控件的属性,使其能够接受”Enter“键按下的事件,然后对EDIT空间添加相应的事件响应函数。但这样做可能影响其他功能的实现(比如像实现”按回车,使光标在不同的EDIT中切换“,如果OK按钮不是处于默认状态的话,就要对每个EDIT空间添加”Enter“键按下的消息响应函数)。
    解决方法之二(推荐的方法):
      先保证EDIT控件的"Want Return"属性是False的。不取消OK按钮的”默认“属性,对其添加一个OnBnClickedOk()函数,这样写:
    void XXXX:: OnBnClickedOk()
    {
        if (GetDlgItem(EDIT1) == GetFocus())   //这个是检测当前的焦点是否在EDIT1控件上
        {
            //这里是你想要执行的代码
        }else{
            OnOK();
        }
    }
    这里的EDIT1就是刚才提到的EDIT控件。
    如此,不但能解决你的问题,而且还有可能对今后其他功能的添加带来便利。

    回答到此结束。


    PS:我是大学在校生,今年才大一,知识掌握得并不全面,如有错误请务必指出。我虽然还没学什么东西,但是对编程有着说不出的喜爱。我想你说不定是一位专业的软件程序员,或者和我一样是个编程爱好者,希望咱们能互相学习、互相促进。谢谢。
    • 已建议为答案 siyuqxxx 2011年4月26日 14:38
    2008年3月23日 12:07
  • 方法:屏蔽回车键,在PreTranslateMessage消息中做如下的处理,

     

    if(VK_RETURN == pMsg->wParam) return TRUE;

     

    就可以解决回车关闭的问题了!!
       

    2008年3月26日 11:44
  • LKG你好!

     

    阅读了你的帖子,感到特别的温暖。非常感谢你的认真,和别样的思路。


    2011年4月26日 14:40