转载地址如下:
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。
其实,这两个标识符的作用,看上去不是特别大。个人感觉,如有纰漏,请指点。