MFC中的Edit控件用于输入数据,当输入的数据为大段数字的时候,全选功能就显得非常重要了,可偏偏在MFC中Edit控件就不 支持全选。Ctrl+A不行,双击也不行。

Ctrl+C和Ctrl+V都是默认支持的。因此为了使用方便,我们仅仅能自己让Edit去支持Ctrl+A全选 功能了。

实现的方式也比較简单,自己处理消息就是!

Ctrl+A是一个组合消息,在检測到A或者a按键按下的时候。推断Ctrl键的状态,假设Ctrl键有效则说明用户按下了Ctrl+A按键,这时候我们将Edit中内容设置为全选就可以。

在类定义中加入:

BOOL PreTranslateMessage(MSG* pMsg);

实现例如以下:

<span style="color:#444444;">BOOL C***Dlg::PreTranslateMessage(MSG* pMsg)
{if (pMsg->message == WM_KEYDOWN){BOOL bCtrl = ::GetKeyState(VK_CONTROL) & 0x80;//BOOL bShift = ::GetKeyState(VK_SHIFT) & 0x80;//BOOL bAlt = ::GetKeyState(VK_MENU) & 0x80;switch (pMsg->wParam){case 'a':case 'A':if (bCtrl){</span><span style="color:#ff0000;">m_ctrLog.SetSel(0, -1); //或 SendDlgItemMessage(IDC_Log, EM_SETSEL, 0, -1);</span><span style="color:#444444;">}break;}}return CWnd::PreTranslateMessage(pMsg);
}</span>

或:

BOOL C***Dlg::PreTranslateMessage(MSG* pMsg)
{if(pMsg->message == WM_KEYDOWN){BOOL b = GetKeyState(VK_CONTROL) & 0×80;if(b && (pMsg->wParam==’a'||pMsg->wParam==’A')){<span style="color:#ff0000;">SetSel(0,-1);  //或 SendDlgItemMessage(IDC_Log, EM_SETSEL, 0, -1);</span>return TRUE;}}return CWnd::PreTranslateMessage(pMsg);
}

备注:

为了避免对使用的Edit一个个的进行处理,能够通过从CEdit类派生一个新类CEditEx类让Edit支持Ctrl+A全选功能。

另外:

Ctrl + A 实现循环 全选/取消全选。尽管取消全选非常easy,一句话SetSel(-1),但难点在于怎样推断取消全选的条件。代码例如以下:

对于一个编辑框。实现它的全选和取消全选(前提:该编辑框获得焦点)

新建一个dialog based MFC application, 命名为“d1”。界面例如以下:

为对话框类加入一个成员变量:bool m_bSelectAll;用于控制全选状态。

另外重载对话框类的PreTranslateMessage事件,加入例如以下代码:

BOOL CD1Dlg::PreTranslateMessage(MSG* pMsg)
{
    if((GetAsyncKeyState(VK_CONTROL) & 0x8000) && (GetAsyncKeyState('A') & 0x8000) && pMsg->hwnd == m_pEdit->m_hWnd)
    {
        if(m_bSelectAll)
        {
            m_pEdit->SetSel(-1);         // 取消全选
        }
        else
        {
            m_pEdit->SetSel(0, -1);          // 全选
        }
        m_bSelectAll = !m_bSelectAll;
        return TRUE;
    }
     
    return CDialog::PreTranslateMessage(pMsg);
}

这样。当编辑框获得焦点时,假设再按下Ctrl+A,编辑框的内容就会被“全选”或“取消全选”。

可是上面以m_bSelectAll来作为推断是否“已经处于全选”状态有个问题,那就是当全选时,用户点击编辑框而取消了全选,但这时,m_bSelectAll却还处于全选状态,也就是说这个标志(m_bSelectAll)与实际的全选状态不一致。

所以採用了另外的方法来验证是否处于全选状态(就是选中内容的长度与编辑框内容长度是否一致)。代码例如以下:

BOOL CD1Dlg::PreTranslateMessage(MSG* pMsg)
{
    if(pMsg->hwnd == m_pEdit->m_hWnd && (GetAsyncKeyState(VK_CONTROL) & 0x8000) && (GetAsyncKeyState(_T('A')) & 0x8000))
    {
        CString txt;
        int start, end;
         
        m_pEdit->GetWindowText(txt);
        m_pEdit->GetSel(start, end);
        if(txt.GetLength() == end - start)  // 处于全选状态
        {
            m_pEdit->SetSel(-1);         // 取消全选
        }
        else
        {
            m_pEdit->SetSel(0, -1);          // 全选
        }
        return TRUE;
    }
     
    return CDialog::PreTranslateMessage(pMsg);
}

说明:GetAsyncKeyState()仅仅检查一个键是否被按下,而不区分大写和小写!

Edit Control响应全选(Ctrl+A)相关推荐

  1. word如何一键全选_学会这七个Word小技巧,五分钟完成3小时的工作

    在办公中我们最常用的就是Word,而掌握一些常用Word小技巧,可以助力我们的办公效率,从此和加班说拜拜.今天就让我们一起来看看有哪些我们常用的Word小技巧,快点赞收藏起来吧~ 一. Word小技巧 ...

  2. 全选、删除、撤回、剪切、复制、粘贴、永久性删除、新建文件夹、启动任务管理器、退出的快捷键

    ctrl+a 全选 ctrl+d 删除 ctrl+z 撤回 ctrl+x 剪切 ctrl+c 复制 ctrl+v 粘贴 shift+delete 永久性删除 ctrl+shift+N 新建文件夹 ct ...

  3. Android开发中ListView多屏的全选、反选功能

    [size=medium] 鄙人最近刚开始学习Android,在练习的时候写到一个ListView的全选反选功能.本来以为这个功能很简单,随随便便就能搞定,结果真的下手去做的时候被虐的死去活来,不知道 ...

  4. 复制粘贴技巧,全选快捷键ctrl加什么?

    电脑上的快捷键有很多,你们知道其中的多少呢?复制粘贴还是只会鼠标右键点击复制粘贴吗?使用快捷键比使用鼠标进行复制粘贴方便很多,全选快捷键ctrl加什么?小编给大家带来快捷键教程!速速来学! 方法一:复 ...

  5. 计算机全选的键盘,电脑键盘全选是ctrl加什么(全网最全的快捷键技巧)

    为了解决这个问题小编特意为大家整理了Word里面最常到的快捷键,总共26个分别是通过Ctrl+26个英文字母组合而成,记忆起来也十分的有规律!非常适合那些职场新人必备! 快捷键通过图片&文字展 ...

  6. 单元格下拉全选快捷键_【excel下拉全选快捷键】Excel中全选是Ctrl A,那么反选呢?...

    电子表格问题,如何用快捷键一下全选所有的有数据的单元格? 1.先用鼠标左键单击数域的任一格,然后按Ctrl A这样整个数据区域就部选. 2.用鼠标左键单击数据区域中的任意单元格,然后按Ctrl *(就 ...

  7. 单元格下拉全选快捷键_EXCEL筛选后把某一列全选,用什么快捷键。我用CTRL+SHIFT+下方向键总是全选,为什么?求教!...

    展开全部 excel全选某一列的快捷键就是32313133353236313431303231363533e58685e5aeb931333431366339ctrl+shift+下方向键,也可以使用 ...

  8. 全选快捷键ctrl加什么 全选快捷键ctrl加哪个键 全选是ctrl加什么?

    全选快捷键ctrl加什么 全选快捷键ctrl加哪个键 1.word全选快捷键"ctrl+A".在word文档中,点击"ctrl+A"两个键,即可选中全部内容. ...

  9. mac全选文字的快捷键_最全Mac系统快捷键一览

    苹果Mac系统常用快捷键有很多,但是很多童鞋对于这些mac快捷键都不是很熟悉,今天小编为大家整理了一份Mac系统常用快捷键大全,大家快收藏起来吧!平时在使用mac系统的时候可以提高不少工作效率哦! M ...

  10. java记事本复制粘贴_Java Swing 如何实现记事本中“编辑”菜单下的 剪切,复制,粘贴,删除,全选 功能...

    这篇文字将要学习以下知识点: 1.如何给JButton按钮添加鼠标点击事件监听器 #1.addMouseListener(MouseListener l)  给JButton添加一个鼠标点击监听器l ...

最新文章

  1. 你的中文大模型真的行吗?来用智源指数测测看
  2. jQuery 性能优化技巧
  3. mysql 触发器 定时触发_mysql 触发器和存储过程组合使用,实现定时触发操作
  4. jQuery——入门基础(获取元素、样式、属性,选择集、过滤器、样式类)
  5. 网络协议:传输层(http://java-mzd.iteye.com/blog/1007577)
  6. webpack系列-优化
  7. 无线路由器和无线网卡的普及知识贴及选择(2019.05更新802.11AX网卡,3T3R wave2路由器推荐)
  8. html代码学习离线文档,新手学HTML代码的简易方法
  9. ubuntu20.04不能切换输入法
  10. 两个ip linux,教你ipconfig有两个ip地址的解决方法
  11. win11在计算机管理中添加用户发现没有本地用户和组,命令方式添加用户以及查看用户
  12. ShaderWeaver使用教程-动画序列帧
  13. 10余智慧项目建设初见成效 南岸用智慧城市开启智慧生活
  14. 在matlab中生成m序列
  15. ftp服务器怎么修改打开方式,ftp服务器怎么修改打开方式
  16. Marshal Lion扩大到中国
  17. 影视剪辑,什么是蒙太奇,蒙太奇的含义
  18. 教你如何暴力破解wifii密码
  19. android 手环app(蓝牙4.0)
  20. Java中面试官常问问题

热门文章

  1. 小苹果音乐用计算机怎么打,小苹果苗语版歌曲-计算器音乐简谱,比如一些流行歌曲小苹果等等之类的?...
  2. Mysql replace/insert into 插入修改数据
  3. android 悬浮球简书,Android-悬浮窗效果FloatingView
  4. 界面设计基础之基本窗口
  5. 第一课:两种方法教你如何注册小程序账号
  6. 深度学习概念名词解释总结
  7. mfc chartctrl 饼状图编写_南瓜糯米饼:外酥里糯,吃到嘴巴里,真是舌尖上的享受...
  8. mysql grant什么意思_MySQL grant 语法的详细解析
  9. Linux文件目录操作命令 rm
  10. 淘宝双11的服务器架构分析(2)