MFC里使用快捷键的原理:按键组合成一个COMMAND/COMMAND_UI消息放入消息队列,然后程序对该消息进行处理。

1.添加Accelerator表(按键组合与消息的对应表)

编辑Accelerator表

修改表ID

在Resource View窗口修改表ID为 IDR_MYACCEL

2.添加消息处理

第一种:右键单击Accelerator表选项,Add Event Handler

第二种:在程序其他地方处理,比如MenuBar、ToolBar及右键菜单消息处理中,只要其中消息的ID与表中ID一致即可

3.加载Accelerator资源

在OnInitDialog中:

HACCEL        m_hAccel;

m_hAccel = LoadAccelerators ( AfxGetResourceHandle(),MAKEINTRESOURCE(IDR_MYACCEL) );

4.激活快捷键

BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
{
    if ( NULL != m_hAccel && 
         pMsg->message >= WM_KEYFIRST  &&  pMsg->message <= WM_KEYLAST )
        {
                return TranslateAccelerator ( m_hWnd, m_hAccel, pMsg );
        }
    else
        return CDialog::PreTranslateMessage(pMsg);
}

TranslateAccelerator()函数试图将按键组合成COMMAND消息并处理。

或者直接在函数内判断按键的组合情况

BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg) 
{

if(pMsg->message == WM_KEYDOWN)
    {
            if(GetAsyncKeyState(VK_CONTROL)) //CTRL 按下
            {
                if( pMsg->wParam == 'C')     //C按下
                    OnCopy();
                if( pMsg->wParam == 'V')     //V按下
                    OnPaste();
                if( pMsg->wParam == 'L')     //L按下
                    OnClear();
                if( pMsg->wParam == 'A')    //A按下
                    OnSelectAll();
            }
    }
    else
        return CDialog::PreTranslateMessage(pMsg);
}

MFC程序添加快捷键相关推荐

  1. 给黑莓程序添加快捷键

    在集成开发环境中打开资源页,在Title属性中,开发者一般会在这里指定应用程序的名字.在名字中挑一个字母,然后在后面加上\u0332,这个字母就成了该应用程序的快捷键. 如果系统原来对这个字母定义了快 ...

  2. MFC 如何添加快捷键

    添加的函数:  1 HACCEL hAccel;  2 hAccel = LoadAccelerators(AfxGetresourceHandle(),MAKEINRESOURCE(IDR_ACCE ...

  3. 应用程序自定义快捷键

    版权声明:本文首发 http://asing1elife.com ,转载请注明出处. https://blog.csdn.net/asing1elife/article/details/8282065 ...

  4. DELPHI 开发的 OCX 控件在 MFC 程序中编辑框快捷键不好使的解决

    公司一个大型的项目中使用了 DELPHI 来开发 OCX 控件做数据库的管理,但是GIS图形系统使用 MFC 开发,最后将 OCX 嵌入到 MFC 程序中作为一个完整的系统交付用户使用,但是在使用过程 ...

  5. ipad键盘程序坞快捷键_将键盘快捷方式添加到您的Web应用程序。

    ipad键盘程序坞快捷键 React和几行代码可以挽救! 我想象一个场景. 您在一家名为Adob的大公司工作--您在一家名为Abode的初创公司工作,开发了一个名为PhotoStore的照片编辑应用程 ...

  6. 【网络通信】简易MFC程序的创建与命令行工具cl.exe、linker.exe的使用

    简易MFC程序的创建与命令行工具cl.exe.linker.exe的使用 实验目标 实验流程 一.MFC程序 1.创建MFC项目 2.资源与代码 3.演示效果 二.编译连接windows API程序 ...

  7. 基于Dialog的MFC程序在启动时隐藏为托盘程序(四)

    这部分说一下如何加menu..如果做小气球.. mfc的menu确是不如C#活着java那么easy.. 首先在rc里添加menu资源..然后在ui界面里先设置一下你的菜单.. 在第(二)部分已经简单 ...

  8. mfc 内嵌 本地html,MFC程序中内嵌网页,附示例工程

    最近在课程设计,因为小悠太懒了,是在不想用C++完成一些简单的文件上传下载操作,于是就想着将网页内嵌到程序中,上传下载神马的就直接使用网页Web来完成就好了,本示例中将演示在MFC程序中内嵌一个htm ...

  9. VC MFC程序,在About对话框中获取并显示程序的版本号

    =================================================本文为HeYuanHui原作 转载必须确保本文完整并完整保留原作者信息及本文原始链接! NN:     ...

最新文章

  1. Ubuntu 下载安装删除方式(自己常用,保持更新)
  2. Hibernate学习(二)
  3. 如何做一场高质量的分享
  4. hadoop yarn集群HA安装及配置
  5. 使用Intel编译器系列合集
  6. Red hat linux ping: unknown host www.baidu.com
  7. 耿楠《LaTeX 中文教程》随堂学习记录
  8. 2000w mysql_MySQL数据库优化(基于酒店2000w条数据)
  9. 反击网络执法官(转)
  10. CTeX书写规范、WinEdt编写XeLaTeX、数模格式编写总结
  11. Java 常用数据类型(总结)
  12. 出现老是弹出Visual Studio 实时调试器 的问题
  13. 美女直播这么火,那你知道怎么测试直播软件吗?
  14. TypeScript-基础类型学习
  15. 职场中不能做的四件事,这才是情商高的表现!
  16. [资源]--100张极简约的电脑桌面壁纸总有一张你喜欢
  17. Android禁用返回键
  18. GNS3实验:三层交换机配置
  19. 工作汇报PPT模板推荐
  20. 使用 EasyCV Mask2Former 轻松实现图像分割

热门文章

  1. linux服务器怎么连接无线网卡,在linux上怎么安装无线网卡驱动?_网站服务器运行维护,linux,无线网卡...
  2. 排序之快速排序的java语言简单实现
  3. MySQL学习总结(2) --- 数据表管理(增删改查)、使用DQL查询数据(SELECT)
  4. 执行mysql语句卡死
  5. 【python】wallpaperscraft壁纸爬虫及下载器实现
  6. JavaScript(获取时间戳)
  7. vivoX9sl的Android隐藏游戏,Vivo手机的隐藏功能,超乎想象的好用,你们都用过几个...
  8. 我与学霸的距离计算机,我与学霸的差距作文500字
  9. Java数组 强制类型转换
  10. HDU 1269 迷宫城堡(强连通图的判定)