windows核心编程指南29.pdf

windows核心编程指南29.pdf

ID:51490609

大小:187.53 KB

页数:4页

时间:2020-03-25

windows核心编程指南29.pdf_第1页
windows核心编程指南29.pdf_第2页
windows核心编程指南29.pdf_第3页
windows核心编程指南29.pdf_第4页
资源描述:

《windows核心编程指南29.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、下载附录B消息分流器、子控件宏和API宏每当我参加一些会议时,常问一些人是不是使用消息分流器,而回答通常是“No”。我再进一步深究这件事,发现很多人不知道消息分流器是干什么用的,甚至没有听说过它。在本书中,通过使用带有消息分流器的C/C++编写示例代码,我想向大家介绍这种不大为人所知但很有用的宏。消息分流器定义在MicrosoftVisualC++中提供的WindowsX.h文件里。通常在Windows.h文件之后紧接着包含这个文件。WindowsX..h文件就是一组#define指令,建立了一组供我们使用的宏。WindowsX.h的宏实际上分为三组:消息

2、分流器、子控件宏和API宏。这些宏以下述的方式为我们提供帮助:¥利用这些宏可以减少程序中要做的转换(casting)的数量,并可使所要求的转换是无错误的。使用C/C++的Windows编程中一个大的问题是所要求的转换数量。你很难看到一个不要求某种转换的Windows函数调用。但应该尽量避免使用转换,因为转换阻碍编译器发现代码中的潜在错误。一个转换是在告诉编译程序:“我知道我在这里传递了错误的转换,但就要这样做。我知道我在干什么。”当你做了许多转换时,就很容易出错。编译程序应该尽可能对此提供帮助。¥使代码的可读性更好。¥可简化16位Windows、32位Wi

3、ndows和64位Windows之间的代码移植工作。¥易于理解(只是一些宏)¥这些宏容易结合到已有的代码中。可以不管老的代码而立即在新的代码中使用这些宏。不必修改整个程序。¥在C和C++代码中都可以使用这些宏,尽管当使用C++类时它们不是必需的。¥如果需要某一个特性,而这些宏不直接支持这个特性,可以根据这个头文件中的宏,很容易地编写自己的宏。¥不需要参照或记住费解的Windows构造。例如,许多Windows中的函数,要求一个long型参数,其中这个长参数的高字(high-word)的值代表一个东西,而其低字(low-word)又代表另一个东西。在调用这个

4、函数之前,你必须用两个单独的值构造一个long型值。通常利用WinDef.h中的MAKELONG宏来做这种事。我简直记不清有多少次把两个值的次序给弄反了,造成对函数传递了一个错误的值。而WindowsX.h中的宏可以帮我们的忙。B.1消息分流器消息分流器(messagecracker)使窗口过程的编写更加容易。通常,窗口过程是用一个大的switch语句实现的。在我的经验中,我见过有的窗口过程的switch语句包含5百多行代码。我们都知道按这种方式实现窗口过程是一种坏的习惯,但我们都这么做过。而利用消息分流器可将switch语句分成小的函数,每个窗口消息对应

5、一个函数。这样使代码更容易管理。有关窗口过程的另一个问题是每个消息都有wParam和lParam参数,并且根据消息的不同,这些参数的意思也不同。在某些情况下,如对WM_COMMAND消息,wParam包含两个不同的值。wParam参数的高字是通知码,而低字是控件的ID。或者是反过来?我总是忘了次序。如附录B消息分流器、子控件宏和API宏计计687下载果使用消息分流器,就不用记住或查阅这些内容。消息分流器之所以这样命名,是因为它们对任何给定的消息进行分流。为了处理WM_COMMAND消息,你只需编写这样一个函数:这是多么容易!分流器查看消息的wParam和l

6、Param参数,将参数分开,并调用你的函数。为了使用消息分流器,必须对你的窗口过程的switch语句做一些修改。看一看下面的窗口过程:HANDLE_MSG宏在WindowsX.h中是这样定义的:对于WM_COMMAND消息,预处理程序把这一行代码扩展成下面的代码:定义在WindowsX.h中的各HANDLE_WM_*宏是实际的消息分流器。它们分流wParam参数和lParam参数,执行所有必要的转换,并调用适当的消息函数,如前面例举过的Cls_OnCommand函数。HANDLE_WM_COMMAND宏的定义如下:688计计第七部分附录下载当预处理程序扩展

7、这个宏时,其结果是用wParam和lParam参数的内容分流成各自的部分并经适当转换,来调用Cls_OnCommand函数。在使用消息分流器来处理一个消息之前,应该打开WindowsX.h文件并搜索要处理的消息。例如,如果搜索WM_COMMAND,将会找到文件中包含下面代码行的部分:第一行是注释行,展示要编写的函数原型。下一行是HANDLE_WM_*宏,我们已经讨论过。最后一行是消息转发器(forwarder)。假定在你处理WM_COMMAND消息时,你想调用默认的窗口过程,并让它为你做事。这个函数应该是这个样子:FORWARD_WM_*宏将分流开的消息参

8、数重新构造成等价的wParam和lParam。然后这个宏再调用你提

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。