现在我们将讨论底下这三行程序代码,在本书中,截至目前为止建立的所有Windows程序中都使用过它们。这些程序代码是标准的消息循环:

while (GetMessage (&msg, NULL, 0, 0))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

下面把上头那段程序代码加以修改,以便使用加速键:

while (GetMessage (&msg, NULL, 0, 0))

{

if (!TranslateAccelerator (hwnd, hAccel, &msg))

{

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

}

}

TranslateAccelerator函数确认存放在msg消息结构中的消息是否为键盘消息。如果是,该函数将找寻句柄为hAccel的快捷键表。如果找到了一个符合的,则呼叫句柄为hwnd的窗口消息处理程序。如果快捷键ID与系统菜单的菜单项一致,则消息就是WM_SYSCOMMAND;否则,消息为WM_COMMAND。

当TranslateAccelerator传回时,如果消息已经被转换(并且已经被发送给窗口消息处理程序),那么传回值为非零;否则,传回值为0。如果TranslateAccelerator传回一个非零值,则不呼叫TranslateMessage和DispatchMessage,而是经过循环回到GetMessage呼叫中。

TranslateMessage中的参数hwnd看起来有点累赘,因为消息循环中的其它三个函数都没有要求这个参数。此外,消息结构本身(结构变量msg)有一个叫做hwnd的成员,它是窗口句柄。

该函数有些不同的原因在于:msg结构的字段由GetMessage呼叫填入。当GetMessage的第二个参数为NULL时,函数会找寻应用程序所有窗口的消息。当GetMessage传回时,msg结构的hwnd是将要获得消息之窗口的窗口句柄。然而,当TranslateAccelerator把键盘消息转换为WM_COMMAND或WM_SYSCOMMAND消息时,它使用函数的第一个参数指定的窗口句柄hwnd来代替窗口代号msg.hwnd。Windows就是这样把所有快捷键消息发送给同一窗口消息处理程序的,即使另一个应用窗口目前拥有输入焦点。当系统模态对话框或者消息框拥有输入焦点时,TranslateAccelerator不会转换键盘消息,因为这些窗口的消息是不经过程序的消息循环的。

在某些情况下,当您程序的另一个窗口(比如一个非系统模态对话框)拥有输入焦点时,您也许不想转换快捷键。您将在下一章中看到如何处理这种情况。

c语言编程代码对齐快捷键,三、Windows键盘快捷键—键盘代码转换相关推荐

  1. C语言实现OOP——轻量级的面向对象 C 语言编程框架 LW_OOPC 介绍(三)

    文章目录 C 语言编程框架 LW_OOPC 介绍(三) 方案的可扩展性如何? LW_OOPC最佳实践 LW_OOPC的优点: LW_OOPC的缺点: 总结: 幕后花絮: 参考资料: C 语言编程框架 ...

  2. c语言编程代码大全(c语言简单代码大全)

    html代码和c语言等编程语言有什么联系吗? HTML叫做超文本标记语言(标准通用标记语言下的一个应用)或超文本链接标示语言,是目前网络上应用最为广泛的语言,也是构成网页文档的主要语言. 怎么修改C语 ...

  3. C语言编程代码——因式分解

    C语言编程代码--因式分解 题目 代码 题目 因式分解 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Des ...

  4. MPLAB-IDE-C语言编程代码实例-分析

    以下学习笔记均使用C语言编程,编程软件为MPLAB IDEV8.89附加PICC18V9.66PRO版本.调试单片机采用pic18f14k22单片机. CONFIG __CONFIG();此段代码为P ...

  5. 语言趣味编程100例无水印_趣味c语言编程100例(三)

    经典c程序100例==51--60 [程序51] 题目:学习使用按位与 & . 1.程序分析:0&0=0; 0&1=0; 1&0=0; 1&1=1 2.程序源代 ...

  6. 万年历c语言编程代码_C语言高效编程与代码优化~

    译文链接:http://www.codeceo.com/article/c-high-performance-coding.html 英文原文:https://www.codeproject.com/ ...

  7. C语言编程入门之--第三章编写第一个C语言程序

      导读:一般学一门计算机语言的第一堂上机课("上机"顾名思义,上计算机,机你太美),就是往屏幕输出"hello world",本章也不例外. 3.1 Hell ...

  8. C 语言编程 — 内存对齐

    目录 文章目录 目录 内存对齐 为什么要内存对齐? 内存对齐跟平台有关 对齐系数 使用 pragma 宏指令修改对齐系数 内存对齐的原则 内存对齐 计算机的内存空间都是按照字节划分的,元素(包括:变量 ...

  9. 高效GO语言编程-代码注释

    更多免费Golang知识,欢迎加入Go宝典 | GOLANG ROADMAP 邀请码:Gopher-1035-0722 Go 语言支持C风格的块注释 /* */ 和C++风格的行注释 //. 行注释更 ...

最新文章

  1. Java读取String分行字符串
  2. linux编译器6,Linux安装gcc编译器详解(CentOS 6.5 64位系统)
  3. 我们需要一个时期,把我们之前的愿景用实际行动实现
  4. OpenCV 玩九宫格数独(二):knn 数字识别
  5. Android studio无法连接识别检测各种模拟器和手机的问题 (万能方案)。
  6. 游戏编程入门之绘制动画的精灵(爆炸特效)
  7. mysql sql len_MySQL的查询计划中ken_len的值计算方法
  8. P3358 最长k可重区间集问题(网络流:串联思想)
  9. 《Linux网络接口》---------struct ifreq struct ifconf
  10. Python 项目实践二(生成数据)第二篇
  11. Mybatis-config.xml配置文件详解
  12. 连接SQL SERVER的时候登录名如何清除
  13. 精英网络技术论坛免杀基础
  14. DPDK 无锁ring, 详解
  15. [AD18]中英文切换
  16. 逆向破解_iOS_学习笔记_1
  17. Kepserver EX6配置opc ua服务端 以及客户端
  18. oracle 结果集已耗尽_java.sql.SQLException: 结果集已耗尽,解决方法!
  19. LINUX学习基础篇(十二)痕迹命令
  20. python得垃圾回收机机制gc

热门文章

  1. (捌)规划方向技能:以ArcMap为例的静态动态流线图绘制方法
  2. 小米刷机救砖包 最全资料和简单易学教程下载
  3. Python:实现perfect cube完全立方数算法(附完整源码)
  4. 神级插件Bito介绍及使用
  5. python渐变_嘈杂的数据中的渐变,python
  6. 良心公司!股价跌了,补齐所有持股员工的损失!
  7. linux中的epoll机制
  8. 【ArcGIS基础】水文流域分析
  9. dom元素增加resize,以及echart增加resize
  10. 水星ud13 (免驱无线网卡) 自带的驱动 下载