近日在为一个数据应用写数据输入界面,大量的编辑框要想实现快速的输入就是有设计良好的符合工作流程的tab键序.相信,不少的人在使用具有大量编辑框的程序时都有这样的想法与感概.而我这个对话框界面主要输入的是数字,因此如果使用tab键作编辑框之间的跳转会在使用数字键盘时不方便.因此,就考虑了用回车键来实现tab键的功能.因为mfc对话框的特点,基于mfc对话框的对话框按下回车键会调用框架内的的onok成员函数导至退出.即使你去掉idc_ok按键的bs_defpushbutton 属性也是不行的.
必须重载wm_getdefid,因为当用户按下回车键时,windows发送wm_getdefid消息来获得缺省的命令id,windows再将它作为wm_command发送,所以重载这个消息必须在高位字中返回dc_hasdefid. 如下所例: 【程序编程相关:利用The Pager Tag Libr】 【推荐阅读:生成树的递归实现】 【扩展信息:文本的DES加密 MD5散列值 DSA的】begin_message_map(cmydlg, cdialog)
on_message(dm_getdefid, ongetdefid) ... end_message_map()lresult cmydlg::ongetdefid(wparam wp, lparam lp)
{ return makelong(0,dc_hasdefid); } 这是一种方法,另外一种方法是在消息循环处着手处理.重载pretranslatemessage这个虚函数,将消息队列中有关键盘按下的消息给拦载下来,在框架之前处理wm_keydown消息.判断是按下回车键后,我们可以用getnextdlgtabitem 函数获得tab键序中下一个或上一个接受tab键的控件句柄.示例代码如下: bool ckeydowndlg::pretranslatemessage(msg* pmsg) { if (pmsg->message == wm_keydown && pmsg->wparam == vk_return) { ... 下一页