转载地址如下:

http://www.xuebuyuan.com/1544382.html

在讲这两个标识符的作用开始,先小感慨下:遇到问题,不要急着百度,请充分利用好VC++的中的各种头文件

在VC中,右击"WM_KEYFIRST"字符,选择“转向WM_KEYFIRST的定义”,VC自动跳转到定义这两个标识符的头文件WINUER.H,代码如下:

#define WM_KEYFIRST                     0x0100
#define WM_KEYDOWN                     0x0100
#define WM_KEYUP                           0x0101
#define WM_CHAR                             0x0102
#define WM_DEADCHAR                   0x0103
#define WM_SYSKEYDOWN             0x0104
#define WM_SYSKEYUP                    0x0105
#define WM_SYSCHAR                      0x0106
#define WM_SYSDEADCHAR            0x0107
#define WM_KEYLAST                       0x0108

你应该知道,所有的键盘消息只有中间的八种,也就是WM_KEYDOWN到WM_SYSDEADCHAR,细心观察,这八个标识符的值是递增的。于是,WM_KEYFIRST和WM_KEYLAST的作用就是告诉你键盘消息的取值范围。

你也许奇怪,为什么WM_KEYFIRST和WM_KEYDOWN是相等的,这应该是便于“检索”键盘消息。

TCHAR *szMessage[]=

{

TEXT("WM_KEYDOWN"),                                TEXT("WM_KEYUP"),

TEXT("WM_CHAR"),                                        TEXT("WM_DEADCHAR"),

TEXT("WM_SYSKEYDOWN"),                         TEXT("WM_SYSKEYUP"),

TEXT("WM_SYSCHAR"),                                  TEXT("WM_SYSDEADCHAR")

};

以上是字符串数组,包括了所有的键盘消息。切记,这数组中的八个标识符的数序是和头文件中的一样的。至于为什么必须这么做,看下面。。。。

好了,现在是最终告诉你WM_KEYFIRST和WM_KEYLAST作用的时候了。

假设你要确定在上述数组中,"WM_KEYDOWN"字符串的索引。你可以用WM_KEYDOWN — WM_KEYFIRST,结果是0.现在你是否明白第一个问题(为什么WM_KEYFIRST和WM_KEYDOWN是相等的)了吧。0就是WM_KEYDOWN在上述数组中的索引。     好了,再假如,如果这八个标识符在数组中的顺序和在头文件中的顺序不一样,那么WM_KEYDOWN — WM_KEYFIRST还是0,可是,此时可能WM_KEYDOWN的索引在数组中的索引不是0。

其实,这两个标识符的作用,看上去不是特别大。个人感觉,如有纰漏,请指点。

C++工作笔记-WM_KEYFIRST和WM_KEYDOWN的用法相关推荐

  1. C++工作笔记-stl中map基础用法(插入,遍历,删除)

    在最近一直在阅读xx项目,看到里面用到了map,读大学期间基本上从来没用到过这种stl(大学就用了Vector和list).下面对map敲如下代码: 运行截图如下: 代码如下: #include &l ...

  2. 大数据工程师工作笔记之集群节点准备

    序 大数据工程师工作笔记系列分享 2020,成为更好的自己 01 Linux 系统网络配置 在公司中,一般来说,大数据集群是不能上网的,这就需要一个跳板机,将需要的组件传到大数据集群中离线安装就可以了 ...

  3. 苹果ios开发一年的工作笔记

    苹果ios开发一年的工作笔记 退回输入键盘 - (BOOL) textFieldShouldReturn:(id)textField{ [textField resignFirstResponder] ...

  4. 工作笔记1——利用bat脚本实现批量上传文件到ftp服务器

    工作笔记1--利用bat脚本实现批量上传文件到ftp服务器 问题概述 利用ftp命令实现上传文件 注意 限时功能 将共享目录映射到电脑中的某个盘符 实现断点续传 问题概述 公司中有大概225k个文件需 ...

  5. 罗辑思维在全链路压测方面的实践和工作笔记

    业务的知名度越高,其背后技术团队承受的压力就越大.一旦出现技术问题,就有可能被放大,尤其是当服务的是对知识获取体验要求颇高的用户群体. 提供知识服务的罗辑思维主张"省时间的获取知识" ...

  6. 系统架构工作笔记-数据展示进程与读取数据进程分离,实现低耦合(展示软件可适用任意厂家数据库)

    目录 背景 实践环境 逻辑结构图 运行截图 数据展示进程源码 服务进程(插件调用)源码 插件源码 MySQL相关 背景 工作一年零1个月了(加上实习),靠着工作中学到的东西,花了周末2天时间,做了一个 ...

  7. MySQL工作笔记-使用事件和存储过程定时更新某表数据

    目录 基本概念 演示及源码 基本概念 因为要看某展示软件的效果,上午用了Qt实时对表进行更新操作! 这是非常low的表现.其中的一个原因就是效率问题! Qt工作笔记-Qt连接Mysql数据库,检索及修 ...

  8. Qt工作笔记-发送端发送Json格式的数据包,接收端解析数据包

    原理以及运行 原理是因为QJsonDocument提供了一个函数toJson 可以直接把Json数据转成QByteArray,这样就可以直接发送数据包,然后再按照常规方法解析即可,本源码中含解析内容, ...

  9. 《Oracle DBA工作笔记》第一章

    <Oracle DBA工作笔记>第一章 BLOG文档结构图I 本文简介 建荣的新书<Oracle DBA工作笔记>拿到手了,下午离下班还有1个小时的时候有空了,就阅读了下新书的 ...

最新文章

  1. linux make 命令行 定义宏(-D)传递给C源代码 简介
  2. 估价分类不允许分离估价
  3. Python机器视觉编程常用数据结构与示例
  4. Spring+Mybatis多数据源配置
  5. 山石网科SG-6000-E5560配置SSL ***实例
  6. unity应用开发实战案例_「简历」STAR法则的实战应用,附手把手教学案例
  7. Django ORM 数据库操作
  8. python实现单张图像拼接与批量图片拼接
  9. Python机器学习:评价分类结果008多分类问题中的混淆矩阵
  10. 【Flink】 Flink与Kafka版本对应关系
  11. 用例子理解java7内存结构
  12. mssql 无法启动调试器 数据为空_Windows无法启动:如何利用PE拯救桌面重要数据?...
  13. jsf 导航_JSF页面导航示例教程
  14. 认真与随便,结果有天壤之别
  15. 哈夫曼树的构造和哈夫曼编码实现详细讲解(含例题详细讲解)
  16. java_SSD3_实验报告_面向对象——多态
  17. 驱动精灵安装的流氓软件如何卸载、及删除驱动精灵
  18. 手机浏览器下载IOS版APP
  19. java520.1314表白_告白日表白公式 520.1314 临沂人知道怎么玩吗
  20. 常见的 vue elementUI el的标签总结

热门文章

  1. 顺着 IT 的潮流,C语言再次迎来了春天!学好了C语言能做什么?
  2. weblogic各个版本对JDK和Spring的支持度
  3. 没有报表和数据分析,银行数据仓库只能是一盘散沙
  4. 【转】设计模式学习笔记之命令模式
  5. 招了一大群学生的游戏代码
  6. C/C++获取高精度时间
  7. 飞鸽传书:服务器开发系列—系统构架
  8. 十句保你职场不败的名言
  9. Symbian编程VC开发环境设置
  10. 最先进的响应式前端框架:Foundation 5!