写MFC程序时,如果想自定义热键比如ALT+S可以采用下面两种方法:

方法一:定义热键的消息响应函数:OnHotKey
定义系统全局热键:
1、首先在.h文件中添加消息响应函数声明
afx_msg LRESULT OnHotKey(WPARAM wParam,LPARAM lParam);
2、关联消息及响应函数
      BEGIN_MESSAGE_MAP()
  ON_MESSAGE(WM_HOTKEY,OnHotKey)
END_MESSAGE_MAP()
3、在初始化函数里注册热键
RegisterHotKey(m_hWnd,ID_HOTKEY,MOD_ALT,‘s’);  
// ID_HOTKEY是自己定义的一个ID宏
‘s'可以写成ASCII码
4、在消息响应函数里添加操作
LRESULT  CMyTest::OnHotKey(WPARAM wParam,LPARAM lParam) 
UINT Mod = (UINT) LOWORD(lParam); // key-modifier flags 
UINT uVirtKey = (UINT) HIWORD(lParam); // virtual-key code 
//判断响应了什么热键 
if( MOD_CONTROL ==  Mod  && ‘s’ == uVirtKey ) 
AfxMessageBox(_T("你按下了组合键 ALT+ S"));
else 
AfxMessageBox(_T("你按下了未知热键")); 
return 0; 
}
 

方法二:

Accelerator方法 只在本应用程序内有效
http://support.microsoft.com/?kbid=222829
1、插入一个新的Accelerator到资源里,把加速键和对应的响应控件(如一个按钮)关联 
2、在对话框头文件中声明: 
    HACCEL   m_hAccel; 
3、在对话框的构造函数里初始化m_hAccel 
   m_hAccel   =   ::LoadAccelerators(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_ACCELERATOR1)); 
4、然后重载对话框的PreTranslateMessage函数,在 
BOOL   CAboutDlg::PreTranslateMessage(MSG*   pMsg)   

     if   (m_hAccel)   
     { 
           if   (::TranslateAccelerator(m_hWnd,   m_hAccel,   pMsg))   
           { 
                 return(TRUE); 
           } 
     } 
     return   CDialog::PreTranslateMessage(pMsg); 
}

然后重载 OnCommand();函数;
BOOL CFreeChatDlg::OnCommand(WPARAM wParam, LPARAM lParam)
{
if (ID_ALT_S == LOWORD(wParam))//ID_ALT_S是在 Accelerator中注册快捷键的ID
{
//加入响应的快捷键的操作
}
return CDialog::OnCommand(wParam,lParam);
}

MFC 热键设置 OnHotKey方法和Accelerator方法的设置相关推荐

  1. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

  2. JS服务器端开发基础篇(Array.slice方法和splice方法)

    Array.slice方法和splice方法在众多的JS数组中属于比较复杂的一个方法,而且容易记混.搜索网络上很多资料都没有发现系统的总结.特别归纳如下,不完全处还希望各位批评指正.  一.slice ...

  3. Loader的load方法和loadBytes方法LoaderContext参数

    (1)在看代码的时候还发现一个以前没有这么注意的问题,也mark一下. 关于Loader的load方法和loadBytes方法LoaderContext参数的问题.. 要加载某个SWF到自己的安全域内 ...

  4. 并发基础篇(六):线程Thread类的start()方法和run()方法

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了 3 个月总结的一线大厂 Java 面试总结,本 ...

  5. 面向对象回顾(构造函数、覆盖和重载、Query接口的list方法和iterate方法、面向对象的六原则一法则、反射、内部类)

    1. 什么是构造函数?什么是构造函数重载?什么是复制构造函数? 当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数. 在程序员没有给类提供构造函数的情况下,Java编译器会为这个类创建一个 ...

  6. Python之数据重塑——【stack()方法和unstack()方法、pivot()方法】

    文章目录 重塑层次化索引 对于单层索引的DataFrame类对象 stack()方法 unstack()方法 对于多层索引的DataFrame类对象 辨析操作内层索引与外层索引的区别 查看多层索引对象 ...

  7. hibernate中get方法和load方法的根本区别

    hibernate中get方法和load方法的根本区别 如果你使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来 ...

  8. 精通Android自定义View(十六)invalidate方法和requestLayout方法

    1 简述 requestLayout方法会导致View的onMeasure.onLayout.onDraw方法被调用:invalidate方法则只会导致View的onDraw方法被调用 2 reque ...

  9. 线程Thread类的start()方法和run()方法

    一.初识 java的线程是通过java.lang.Thread类来实现的.VM启动时会有一个由主方法所定义的线程.可以通过创建Thread的实例来创建新的线程.每个线程都是通过某个特定Thread对象 ...

最新文章

  1. 中国电子学会青少年编程能力等级测试图形化四级编程题:计算生肖
  2. React组件继承的由来
  3. nRF52832的UICR
  4. sql注入——day01
  5. 新闻发布项目——实体类(categoryTB)
  6. html5块元素代码,html5 区块与内联div 与span html块级元素(示例代码)
  7. 计算机主机声音怎么办,电脑主机声音大怎么解决 电脑主机嗡嗡响是怎么回事...
  8. 亲测 asp.net 调用 webservice返回json
  9. 穷的时候要记住这5点,才能有机会翻身
  10. 【嵌入式】第一次大作业_记录环境温度并存入数据库
  11. 做梦都没想到,就这样得到了一位大佬的青睐
  12. 网易云桌面歌词好看的配色方案
  13. 部署ISA2006标准版防火墙
  14. nyist——ACM新生牛刀小试 Round#1题解
  15. 2020全球C++及系统软件技术大会议程
  16. 정부와동포 사고 전화해야
  17. 数据科学与大数据技术专业 —— 云计算●虚拟化 课程 期末复习卷及其简答(2)
  18. 阿里云服务器的公网ipv6地址申请与配置
  19. 支理解SVM的三层境界
  20. 【收藏】最全计算机网络基础思维导图

热门文章

  1. 校园招聘攻略----硬件工程师基础问题(六)
  2. ChatGPT辩证观点:“人才不是一个企业的核心竞争力,对人才的管理能力才是一个企业的核心竞争力”
  3. 对于ip地址(私有ip,公有ip)的理解与总结
  4. Python008: Python大作业之移动的小火车动画(一)
  5. MPI并行程序编写与调试(奇偶变换排序)
  6. 金山已经上市,软件行业还是不景气
  7. php获取基站,基站查询API接口_免费数据接口 - 极速数据
  8. 迅雷5总提示要升级到迅雷7才能用,不升级时也能用,如何恢复正常
  9. 移动web开发清除默认样式设置
  10. 芜湖,这是一棵会唱歌的圣诞树