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

2023-10-26

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

以下转载自: http://blog.csdn.net/ghgk/archive/2004/10/20/144795.aspx

近日在为一个数据应用写数据输入界面,大量的编辑框要想实现快速的输入就是有设计良好的符合工作流程的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键序中下一个或上一个接受TAB键的控件句柄。示例代码如下:

BOOL CKeydownDlg::PreTranslateMessage(MSG* pMsg) 

{

   if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)

   {

     CWnd *mwnd = GetNextDlgTabItem (GetFocus()); //取得当前焦点控件的下一个控件的句柄

      if (mwnd)

     {

       mwnd->SetFocus(); //设置下一件控件得到输入焦点

        return TRUE;

     }

   }

   return CDialog::PreTranslateMessage(pMsg);

}

但是,各位有没有注意到。这样处理之后,虽然可以在各个控件之进行输入焦点的转移。可是当一个按钮控件获得了焦点之后,也是按下回车键。以前我们习惯中或者说预料中按下该按钮的后应该执行的功能没有被执行,而焦点又跑到按钮之后的控件上去了。这就是上面代码的不足之处,虽然实现了焦点由回车键控件转移,但是按钮却不能用回车键来操作了。只以用鼠标,这和大家习惯不合。而且,在快速的数据输入中不能用回车键来按下这个按钮却要用鼠标来点击也有违当初我们要快速这样一个目的。所以,还得对以上代码做适当的修改。代码如下。在这里增加了对当前焦点控件类的判断,即如果当前控件是按钮(Button)那么就不执行焦点跳转而是构造一条WM_COMMAND消息发送给程序,让程序以为是鼠标点击了该按钮。从而执行了这个按钮具有的功能而不是什么也不做的焦点转移。

BOOL CKeydownDlg::PreTranslateMessage(MSG* pMsg) 

{

     if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)

     {

          CWnd *wnd = GetFocus ();

          if (wnd != NULL)

          {

               char str[256];

               CString ClassName = _T("Button");

               GetClassName (wnd->m_hWnd, str, 256);

                 if (ClassName == str)

                 {

                        UINT i = wnd->GetDlgCtrlID ();

                        SendMessage (WM_COMMAND, i, (LPARAM)wnd->m_hWnd);

                        return TRUE;

                 }

          }

      CWnd *mwnd = GetNextDlgTabItem (wnd);

      if (mwnd)

      {

           mwnd->SetFocus();

           return TRUE;

      }

 }

 

 return CDialog::PreTranslateMessage(pMsg);

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Git & Github 的使用(配合VSCode)

    1 git 和 vscode 环境管理 git下载位置 根据自己的电脑配置进行下载即可 Git Downloads 比如我的是linux ubuntu 那么我就选择Linux 并在命令行下敲下来这个 下载完git后 可以在终端上输入命令 g
  • Junit

    TestCase之间一定要保持完全的独立性 不允许出现任何的依赖关系 不能依赖与测试方法的执行顺序 DRY Don t Repeat Yourself Junit一旦执行到了Assert fail 方法测试便失败
  • 五分钟搞懂 React Hooks 工作原理

    前言 Hooks 是 React 中比较火的一个概念 用过的小伙伴都说好 但是 在使用 Hooks 的时候 我们可能会有很多疑惑 1 为什么 useEffect 第二个参数是空数组 就相当于 ComponentDidMount 只会执行一次
  • hexo stellar博客设置Twikoo评论(使用Zeabur 部署)

    2023年7月24日更新 需要绑定一下支付宝 每个月大约4块钱 还算对学生党划算 否则可能无法使用免费的服务 说是免费额度结果还是要钱鸭 这里按要求开通就好了 主要参考 stellar 评论插件配置 Twikoo 这里使用的是Twikoo
  • i love you 浪漫字体复制_七夕

    七夕情人节来临之际 朋友圈早已被各种代购刷屏 你啥都不送 让你女朋友七夕的时候在朋友圈炫耀什么 扫一扫进七夕保命群 教你七夕买什么送女友才能保命 你男朋友是不是以为你缺氧 所以每个节日都送你空气 不得不承认他们一个个都是被代购事业耽误的网络
  • Towards 3D Human Pose Estimation in the Wild: a Weakly-supervised Approach论文翻译

    论文地址 https arxiv org abs 1704 02447 code https github com xingyizhou pytorch pose hg 3d Towards 3D Human Pose Estimation
  • 【机器学习】浅谈 模型大小与推理速度

    目录 一 前言 二 常用模型大小评估指标 2 1 计算量 2 2 参数量 2 3 访存量 2 4 内存占用 2 5 小结 三 计算量越小 模型推理就越快吗 3 1 计算密度与 RoofLine 模型 3 2 计算密集型算子与访存密集型算子
  • 逍遥模拟器导出文件到电脑

    1 确保已经成功连接模拟器 如有问题 请查看 https blog csdn net qq 15228737 article details 81142905 2 用cd命令找到要导出的文件夹 文件 再将该文件夹 文件导出到电脑上 如下图
  • React学习--JSX与react事件

    1 JSX 1 1 表达式 在React中使用JSX来描述HTML页面 而且可以与js混合使用 使用JavaScript表达式时要将表达式包含在大括号里 const user firstName Harper lastName Perez
  • 关于虚方法virtual和抽象方法以及多态的研究

    虚方法virtual定义 当类中的方法声明前加上了virtual 修饰符 我们称之为虚方法 反之为非虚 使用了virtual 修饰符后 不允许再有static abstract 或override 修饰符 必须是Public 为了实现多态
  • 御剑WEB指纹识别系统教程,图文教程(超详细)

    作者简介 CSDN top100 阿里云博客专家 华为云享专家 网络安全领域优质创作者 推荐专栏 对网络安全感兴趣的小伙伴可以关注专栏 网络安全入门到精通 御剑WEB指纹识别 一 基本使用 二 内置字典 三 自定义字典 四 扫描原理 御剑W
  • Content-Type 属性值

    数据请求headers常见的Content Type值 Content Type 属性值众多 每个值都有其特定的作用和使用场景 下面是一些常见的 Content Type 值和对应的作用 Content Type application x
  • 算法-宽度优先搜索

    算法 宽度优先搜索 一 宽度优先搜索 广度优先或横向优先搜索 是一种图形搜索算法 简单的说 BFS是从根节点开始 沿着树的宽度遍历树的节点 如果所有节点均被访问 则算法中止 DFS Depth First Search 深度优先搜索 对每一
  • 解决Mac版微信小程序开发工具打开后无法显示二维码

    问题描述 正常情况下 打开微信小程序开发工具后 首页提示扫描二维码进行登陆 但是如果不显示二维码 当然无法登陆 解决方案 无法显示二维码肯定是程序运行哪里出错了 我们直接点击桌面图标是无法排查错误 所以需要切换至命令行进行启动 打开命令行
  • 华为交换机开局配置

    sysname SWITCH aaa undo local aaa user password policy administrator local user admin password irreversible cipher admin
  • 四、无人机知识笔记(初级:基本运动原理)

    笔记来源于 沈阳无距科技 工业级无人机的中国名片 编程外星人 目录 一 多旋翼直升机 二 基本飞行姿态 三 多旋翼飞行原理 四 反扭力与偏航运动 五 螺旋桨 六 有刷电机和无刷电机 七 电调与PWM信号 八 动力电池 九 遥控器 十 机架设
  • C++ ——STL(上)

    前言 STL基本概念 1 STL Standard Template Library 标准模板库 2 STL从广义上分为 容器 container 算法 algorithm 迭代器 iterator 3 容器和算法之间通过迭代器进行无缝连接
  • SQL注入***

    SQL注入 是 对数据库进行 的常用手段之一 随着B S模式应用开发的发展 使用这种模式编写应用程序的程序员也越来越多 但是由于程序员的水平及经验也参差不齐 相当大一部分程序员在编写代码的时候 没有对用户输入数据的合法性进行判断 使应用程序
  • npm 安装卸载模块 & ionic插件安装与卸载

    npm安装模块 npm install xxx利用 npm 安装xxx模块到当前命令行所在目录 npm install g xxx利用npm安装全局模块xxx 本地安装时将模块写入package json中 npm install xxx
  • 用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果

    用回车键实现MFC对话框中TAB键控制输入焦点在控件中跳转的效果 以下转载自 http blog csdn net ghgk archive 2004 10 20 144795 aspx 近日在为一个数据应用写数据输入界面 大量的编辑框要想