MFC回车键不关闭对话框以及变成TAB键效果
之前在弄完这个十六进制字符串异或的工具后,发现直接按回车键就直接关闭了工具。网上搜了下解决方案,然后自己的总结如下4种方法:
1 设置一个默认按钮(不推荐)
如前文小节5中所述,只要将“进行异或”这个按钮属性中的Default Button设置为"TRUE"就行了。但是这样就直接触发这个按钮对应的事件OnBnClickedButton1,而不是对输入的数据进行合法性检查。
2 比较推荐的是重载OnOK()函数或者PreTranslateMessage()函数
首先我们需要找到这两个函数的位置,方法有两种,效果都是殊途同归:
在类视图中点击对话框类(CHexStrXorDlg),然后在“属性”中点击菜单栏上的“重写”按钮,可以选择需要重写的函数。
或者直接点击“项目”——“类向导”,“类名”选择对话框类(CHexStrXorDlg),点击“虚函数”就可以看到可以被重载的函数了,右侧是已经被重载了的函数。
3 取消回车的效果
通过重载OnOK()函数,然后函数体内不做任何处理,这样就可以直接屏蔽回车键的效果了。
1 2 3 4 5 |
|
4 获取焦点位置,根据是否在Button按钮资源上做相应处理
通过重载PreTranslateMessage()消息函数,可以改变MFC的消息控制流程,能自主处理键盘和鼠标消息。于是,先捕捉到回车键所在的控件焦点,然后判断是否是Button按钮。如果焦点在Button按钮上,则给资源ID为i的Button按钮发送点击消息,否则设置下一个控件得到输入焦点。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
5 直接把回车键的效果替换成TAB键的效果
同小节4中一样,先要获取焦点位置信息,但是直接将回车的效果替换成TAB键的效果。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
打赏支持
Comments »