用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

          近日在为一个数据应用写数据输入界面,大量的编辑框要想实现快速的输入就是有设计良好的符合工作流程的TAB键序。相信,不少的人在使用具有大量编辑框的程序时都有这样的想法和感概。而我这个对话框界面主要输入的是数字,因此如果使用TAB键作编辑框之间的跳转会在使用数字键盘时不方便。因此,就考虑了用回车键来实现TAB键的功能。因为MFC对话框的特点,基于MFC对话框的对话框按下回车键会调用框架内的的OnOk成员函数导至退出。即使你去掉IDC_OK按键的BS_DEFPUSHBUTTON 属性也是不行的。
必须重载WM_GETDEFID,因为当用户按下回车键时,Windows发送WM_GETDEFID消息来获得缺省的命令ID,Windows再将它作为WM_COMMAND发送,所以重载这个消息必须在高位字中返回DC_HASDEFID。 如下所例:

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键序

MFC中Enter设置为“确定”的功能 在新建的MFC对话框中,按下回车时,系统会调用”默认“事件处理函数,也就是OnOK(),倘若你自己的CFormView子类或者CDialog子类没有重写OnOK()函数,则会调用父类的OnOK,其结果是关闭界面。要屏蔽Enter退出的功能,只需要将在CDialog中重写ONOK()函数即可。而要实现默认为“确定”功能,下面两种方法供参考: 1.采用ClassWizard进行实现 阅读详情

相关推荐

MFC按钮对于盘回车和空格响应,引发的问题

在调试写的代码的时候,碰到一个“很奇怪的"现象。因为进度的原因,当时就是当成一个异常输入进行了处理。现在空闲下来,重现了问题现象。现象是:在一个弹出窗口中,按”enter“和”space“关闭对话框对话框已经按照我以前的博客文章(https://blog.csdn.net/yishang44/article/details/99680673)描述的处理过了。在一个很偶然的启发下才发现问题。弹出...

2537

MFC对话框中按TAB 实现指定控件跳转

MFC对话框中按TAB 实现指定控件跳转

zt_xcyk的专栏 2010

MFC中自定义按钮响应盘的回车操作

MFC的项目中,运行时按下回车的时候

仲达先生 2350

MFC设置按下Enter后响应指定按钮

鼠标右点击想要设置的button,选择属性(Properties),再选择Styles,选中Default Button

weixin_34391854的博客 745

MFC怎样实现回车键相当于点击指定按钮

1. 在类属性里,添加重写PreTranslateMessage BOOL CToolBoxTestDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if(pMsg->message == WM_KEYDOWN)  { if(pMsg->wParam == VK_RETURN)//当按下为回车

Sayesan的专栏 3862

VS2008, MFC 编程 对话框 笔记3 - 实现回车键 在Edit Control控件 输入焦点切换(此方法比较麻烦)

1. 一般情况,当按回车键触发default按,而一般来讲是 确定 按钮 ,此时会程序会退出,原因是 确定 按钮 的Defalut Button属性 设为true,过程中调用了基类的OnOK函数: 2. 在新建的Dialog类中,增加 Windows 消息处理INITDIALOG,但是不太一样的是 要在重写里面添加 3. 用来转移焦点的Edit control控件的属性 Multiline 设为True 4.双击 资源视图 dialog的 确定 按钮 实现一个OnBnClickedO

DZWH的博客 771

从零实现MFC计算器:掌握Windows桌面开发核心与状态机设计

桌面应用开发是软件工程的基础领域,其核心在于理解图形用户界面(GUI)的事件驱动架构与业务逻辑的协同。在Windows平台,MFC(Microsoft Foundation Classes)作为经典的C++框架,通过其文档-视图模型和消息映射机制,清晰地揭示了窗口、控件与消息循环的底层原理。掌握MFC不仅有助于维护遗留系统,更能深刻理解现代GUI框架的设计思想。通过实现一个功能完整的计算器项目,开发者可以实践从界面布局、控件事件绑定到核心业务逻辑状态机设计的全流程。本项目详细拆解了如何利用**Visual

weixin_34198881的博客 407

Qt开发入门:从零到跨平台GUI低手

Qt开发入门:从零到跨平台GUI低手

Yusei_0523的博客 399

MFC EDIT 回车事件响应之 OnChar() 实现

本文阐述了在MFC下EDIT控件实现回车事件的响应,采用PreTranslateMessage,虚方法和OnChar事件相结合的方法,同时兼容了扫描枪输入的难题,这实际使用解决输入捕获事件具有实际意义。

孤独剑的专栏 3324

vc(mfc) 用VC实现特定编辑框上对回车键响应

vc(mfc) 用VC实现特定编辑框上对回车键响应 2010年06月03日    在通常的以CEditView为基类的单文档/多文档视图程序中,可以很好的响应输入回车键,只需比较最近两次的输入的字符,看看最新输入的字符是 否内码是13(0x0d,回车键的内码)即可识别出来,而要单独把一个编辑框放入对话框中却根本不响应,这个看似简单的问题在实际应用中还是解决起来比较 ...

ukn660dm 413

基于MFC盘响应(热触发事件)

MFC功能响应

靓仔的博客 2601

VC++ MFC 写窗口,在对话框运行时按回车键对话框自动关闭了……

【问题】:VC++ MFC 写窗口,在对话框运行时按回车键对话框自动关闭了…… 【解决】:当你的对话框中含有按钮,并且你的对话框处于激活状态时,无论你在Edit中按回车还是在别的地方回车,都会激活   具有'Default   Button'   属性的按钮的OnClick

小怪兽的专栏 2506

在Dialog中button回车键

  1,  如果该Dialog中,某个button拥有focus,则敲回车键时会响应该按钮; 注:button拥有focus的方法: (a)使用Tab切换到某按钮; (b)在建立Dialog时设定Tab Order,把某一buttontab顺序设为1,则该Dialog初始时,这个button拥有focus;(打开资源(.rc)文件,可以发现得到焦点按钮总是在最前面) (c)...

weixin_34245082的博客 588

MFC对话框中处理Enter或Esc按事件方法

建立好的MFC对话框,按下Enter或Esc时,系统会调用”默认“事件处理函数,也就是OnOK(),倘若自己的CFormView子类或者CDialog子类没有重写OnOK()函数,则会调用父类的OnOK,其结果是关闭界面。要屏蔽Enter或Esc退出的功能,只需要将在CDialog中重写ONOK()函数即可。而要实现默认为“确定”功能,下面两种方法供参考: 1.采用ClassWizard进...

u011555996的博客 1679

MFC EditCtrl响应回车按事件

MFC EditCtrl响应回车按事件

eickandy的专栏 7904

按Enter或者Ese,mfc程序退出的解决方法

vs 2008,默认焦点在确定按钮上,回车就触发这个按钮的OnOK事件,默认按回车是触发OnOK事件,看看有没有无效断点; 注释掉OnOK();或重设tab顺序;取消ONOK的defaultbutton属性;   一、原因         当用户按下Enter时,Windows就会自动去找输入焦点落在了哪一个按钮上,当获得焦点按钮的四周将被点线矩形包围。如果所有按钮都没有获得输入

jimonanhai1的专栏 7816
上一篇: MFC ODBC类使用心得
下一篇: 动态数据交换(DDX)的另类用法
ghgk
博客等级 码龄24年 3粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值