对话框处理TAB按键事件的三种方法

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

对话框(Dialog)分为模态对话框和非模态对话框(Modeless Dialog)。非模态对话框不能处理TAB键、快捷键等按键事件,也就是说用户不能在非模态对话框中通过按TAB键切换各控件之间的焦点(Focus)。但这也不是没有解决办法的。

方法一
在MSDN中,让非模态对话框处理TAB按键事件的经典代码如下:


其主要解决方案是让非模态对话框hwndDlgModeless的父窗口hwndMain,在其主消息循环中通过调用IsDialogMessage函数来通知hwndDlgModeless TAB按键事件。可是,如果hwndMain没有明确写出的主消息循环,由该怎么办呢?

方法二
譬如,当hwndMain指向的是一个模态对话框时,其WinMain函数通常实现如下:

资源文件中,IDD_MAINDIALOG定义的对话框只有标题栏、默认的OK(IDOK)键和Cancel(IDCANCEL)键。对话框的主消息循环在系统API DialogBox中,我们无法动其分毫。于是,只有修改WinMain函数,还得添加三个全局变量:

因为将父窗口hwndMain创建为非模态对话框,所以在其主消息循环处除了调用IsDialogMessage函数处理非模态对话框hwndDlgModeless的消息外,还要调用该函数处理hwndMain的消息。另外要特别注意的是,调用DestroyWindow函数销毁对话框hModelessDlg和hwndMain,只能在退出主消息循环之后进行,千万不能放到对话框过程函数DialogFunc中对消息WM_CLOSE和WM_QUIT的处理模块中,否则会引起整个进程陷在主消息循环里,无法退出。在处理消息WM_CLOSE时,只需调用函数PostQuitMessage即可。消息WM_QUIT就不用处理了。以下是让非模态对话框处理TAB按键事件全部代码(除去注释):

方法三
还可以用函数FindResource、LoadResource、LockResource、UnlockResource、FreeResource来加载和释放对话框资源,用函数CreateDialogIndirect创建非模态父对话框hwndMain。要使用这种方法的话,大部分代码都相同或类似,但查找、加载、锁定、释放对话框资源这些代码实现起来颇为麻烦,还不如直接调用函数CreateDialog来得方便、简洁。这里就不详细说明了。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/BlackMonkey/archive/2005/09/17/483543.aspx

用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果           近日在为一个数据应用写数据输入界面,大量的编辑框要想实现快速的输入就是有设计良好的符合工作流程的TAB键序。相信,不少的人在使用具有大量编辑框的程序时都有这样的想法和感概。而我这个对话框界面主要输入的是数字,因此如果使用TAB键作编辑框之间的跳转会在使用数字键盘时不方便。因此,就考虑了用回车键来实现TAB键的功能。因为MFC对话框的特点,基于MFC对话框的对话框按下回车键会调用 阅读详情

相关推荐

tab点击事件(地区选择-简单demo)

简单的一个tab效果。无病毒。没有数据传输,纯静态页面

c#winform中 TabControl的选项卡改变时的事件

tabcontrol有一个事件叫Selected private void tabCtree_Selected(object sender, TabControlEventArgs e) { if (e.TabPage == tabpage1) { //当选项卡切换tabpage1时处理的事件

yal179的专栏 9005

5分钟搞定Vivado IP核的VCS仿真:从Export脚本到Verdi波形查看全流程

本文详细介绍了如何利用Vivado的Export Simulation功能,快速搭建Vivado IP核的VCS与Verdi联合仿真环境。通过自动化脚本生成、FSDB波形配置及高效调试技巧,实现从工程导出到波形查看的全流程,大幅提升FPGA验证效率,尤其适合IC验证工程师和竞赛团队。

weixin_29306261的博客 476

移动web开发----Tab基础事件

移动web页面上的click事件响应会慢300ms。 300ms延迟怎么办?使用Tap事件代替click事件,Tap事件是一个自定义事件。 自定义Tap事件原理: 在touchstart,touchend时记录时间,手指位置,在touchend时进行比较,如果手指位置为同一位置(或允许移动一个非常小的位移值)且事件间隔较短(一般认为是200ms),且过程中未曾触发过touchmove,即可认...

陈开心的博客 1093

浅谈声发射振动复合传感器

浅谈声发射振动复合传感器 随着全球经济和自动化工业的迅速发展,人们对设备故障特别是轴承类的故障诊断也日益重视起来了。 为满足客户对旋转仪器轴承异常的精准诊断,单一的依靠振动信号或声信号分析,是很难兼顾轴承的多种异常情况的。 为此,市面上开始着手研发出了可同时分析机械设备的振动信号和声信号的复合型传感器。 初期的复合型传感器主要有 2 种类型,下面以 A、B 来举例说明。 A 型是在被测物表面不同的 2 个位置分别放置声发射(AE)传感器和加速度(ACC)传感器,它虽能一定程度...

pxtech的博客 1151

飞书+扣子+DeepSeek三件套:5分钟搞定公众号文章批量改写(附完整配置截图)

本文详细介绍了如何利用飞书、扣子和DeepSeek三款工具,无需编程即可搭建一个高效的公众号文章批量改写自动化工作流。通过飞书多维表格管理链接与成果,扣子平台串联整个流程,并调用DeepSeek智能体进行内容润色与改写,实现从内容抓取到智能处理的完整自动化,大幅提升新媒体运营效率。

python9snake的博客 208

win32模态与非模态对话框

win32模态与非模态对话框一、模态对话框与非模态对话框的区别二、模拟实现模态窗口1. 非阻塞的方式实现窗口的模态2. 阻塞的方式实现窗口的模态 一、模态对话框与非模态对话框的区别 使用DialogBox、DialogBoxIndirect、DialogBoxParam、DialogBoxIndirectParam创建模态对话框时,系统会首先将此模态窗口的父窗口disable掉,然后启动和运行一个消息循环,接受和拆分消息。在EndDialog调用时结束消息循环,设置结束模式对话框的返回值,销毁窗口。 使用C

Coding14的博客 1803

云端办公文件存储与访问全攻略:选型、预算、实操一本通

随着远程办公、多设备协作成为常态,“文件云端存储、随时调用” 已成为提升办公效率的核心需求。本文从用户实际场景出发,系统拆解云端存储的选型逻辑、全场景费用预算,重点解答 “文件能否直接在线打开” 的核心疑问,并提供实操技巧与安全保障方案,覆盖个人、小团队(含兼职)、企业全维度需求,帮助不同规模用户快速搭建高效、低成本的云端办公体系。

hy行者勇哥的博客 1240

tab事件

pageEncoding="UTF-8"%> String path = request.getContextPath(); %> .xs{color: #F00;text-align:center;} //tab切换激发相应的事件       事件工单     故障工单       

yuhui666666的博客 1052

Mac电脑安装burp suite2024版本记录

下载最新版本burpsuitloader-XXX-all.jar,改名为burpsuitloader.jar。目录下,修改vmoptions.txt文件,新增以下内容,如果keygen不是这个名称的话,需要修改。,点击license左侧的copy复制它,然后手动从启动台启动burpsuite。,复制如下命令到终端即可(要加双引号,不然目录中空格会导致命令截断)再复制激活响应信息到burpsuite中即可激活。后续运行burp直接从启动台运行即可。将如下框的信息复制到激活器中。输入后下一步,点击手动激活。

墨痕诉清风的博客 899

基于STM32XX的LCD液晶显示屏(HS19264G06A、驱动芯片:ST7525)驱动C程序设计

define USE_HW_SPI 1 // 1:使用硬件SPI, 0:使用软件模拟SPI。

myron6688的博客 234

css实现tab事件

1、利用label for 属性 (规定 label 与哪个表单元素绑定)。2、利用radio的checked 属性 显示隐藏。html代码 <nav class="accordion arrows"> <header class="box"> <label for="acc-close" class="box-title">A...

weixin_34127717的博客 181

车载以太网网络测试-24【SOME/IP概述】

SOME/IP**(Scalable Service-Oriented Middleware over IP)是一种基于IP网络的面向服务的通信协议,专为汽车电子系统设计,支持服务发现、远程过程调用(RPC)和事件通知等功能。核心标准是由 AUTOSAR(汽车开放系统架构)定义,现已成为车载通信的重要标准之一(如AUTOSAR 4.0+)。SOME/IP的全称是,它是一种基于IP网络的面向服务的通信协议,广泛应用于汽车电子(AUTOSAR)和物联网领域。Scalable(可扩展的)含义。

车载网络测试工程师的博客 2186

让非模态对话框处理TAB按键事件的三种方法

让非模态对话框处理TAB按键事件的三种方法作者:Oscar Cai时间:2005-9-17 20:17对话框(Dialog)分为模态对话框和非模态对话框(Modeless Dialog)。非模态对话框不能处理TAB键、快捷键等按键事件,也就是说用户不能在非模态对话框中通过按TAB键切换各控件之间的焦点(Focus)。但这也不是没有解决办法的。方法一在MSDN中,让非模态对话框处理TAB按键事件的经

BlackMonkey的专栏 4330

DeepSeek R1-32B医疗大模型的完整微调实战分析(全码版)

【代码】DeepSeek R1-32B医疗大模型的完整微调实战指南(全码版)

AllenLV的博客 5101

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

DLL/OCX中的MFC对话框不能处理Tab和回车键的问题

原文发表在[http://community.youkuaiyun.com/expert/Topicview2.asp?id=3072485] 带子窗口的ActiveX控件问题,如何获取回车键? 问题: 新建一个MFC ActiveX工程,添加一对话框资源,上面有一些标准控件,如按钮、编辑框等,并生成一个类CCtrlPanel。在CXXXXCtrl类中:int CXXXXCtrl::OnCreate(LPC

蒋晟的专栏 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

虚拟键盘——设计思路及event事件处理方法

前面谈及了虚拟键盘的设计方法,其思路如下:

zzwdkxx的专栏 2463

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Win32 Dialog对话框处理WM_KEYDOWN事件

MFC中重写虚函数PreTranslateMessage里是可以过滤WM_KEYDOWN消息的。但是如果是Win32 SDK中利用DialogBox/DialogBoxParam创建模态对话框一般行为是不处理WM_KEYDOWN消息的。如果该对话框中没有任何的子控件的话,在对话框的窗口回调函数DlgProc()中是可以过滤到WM_KEYDOWN消息的,不过并不是所有的键的消息都可以捕获到,例如像T

God,please give me a little more time .... 6757

Control.ProcessDialogKey 方法 ——用以处理对话框按键(TAB ESC 箭头键 等)

Control.ProcessDialogKey 方法 处理对话框键。 命名空间:  System.Windows.Forms程序集:  System.Windows.Forms(在 System.Windows.Forms.dll 中) 参数 keyData类型:System.Windows.Forms.KeysKeys 值之一,它表示要处理的键。 返回值 类...

weixin_34055910的博客 164

tab键怎么关闭_方法 | 键盘按键部分失灵,怎么办?

前面这段闲扯淡,列位看官可以略过,直接奔干货.键盘部分按键失灵怎么办?当然是换了。当然,如果是普通键盘,换一个无非几十块钱。但是,如果是笔记本呢?甚至如果是机械键盘呢?前者得上百,后者得上几千了吧。当然,如果您是壕,请随意,当我没说。比如,如果我一个机械键盘(假装我有)的一个重要的按键坏了,其它键都能用,难道我就要重买一个吗?我买这个时就咬着后槽牙呢好不好!(重要按键举例:Fn, Ctrl, Ho...

weixin_39762441的博客 2144

MFC对话框:设置对话框控件的Tab顺序

运行加法计算器程序,显示对话框后不进行任何操作,直接按回车,可以看到对话框退出了。这是因为“退出”按钮是Tab顺序为1的控件,也就是第一个接受用户输入的控件。但是按照我们的输入习惯,应该是被加数的编辑框首先接受用户输入,然后是加数编辑框,再接下来是“计算”按钮,最后才是“退出”按钮。        我们先来直观的看看各个控件的Tab顺序吧。打开“Resource View”视图,然后在资源中找到

Armstronghappy的专栏 1600

MFC对话框程序屏蔽回车与ESC键,Tab键

这里仅介绍重载对话框的消息预处理函数PreTranslateMessage(MSG* pMsg)来进行消息屏蔽。 MFC下基于对话框的程序,默认的会有一个“确定”按钮,还有一个“取消”按钮,那个“确定”按钮是默认按钮。这时候运行程序,按下回车键或者ESC键,程序都会退出。 《Inside Visual C++》一书中:“当用户按下Enter键时,...

diexianxia7643的博客 319
上一篇: TCHAR、_T与_TEXT
下一篇: 【MFC】中的ON_COMMAND_RANGE宏
cmdhack
博客等级 码龄19年 20粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值