windows核心编程指南29.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:4 大小:187KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

windows核心编程指南29.pdf

windows核心编程指南29.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

下载附录B消息分流器、子控件宏和IPA宏每当我参加一些会议时,常问一些人是不是使用消息分流器,而回答通常是“oN”。我再进一步深究这件事,发现很多人不知道消息分流器是干什么用的,甚至没有听说过它。在本书中,通过使用带有消息分流器的++C/C编写示例代码,我想向大家介绍这种不大为人所知但很有用的宏。消息分流器定义在MicrosoftVisualC++中提供的h.XswWodni文件里。通常在h.swWodni文件之后紧接着包含这个文件。h..XsWwodni文件就是一组enifed#指令,建立了一组供我们使用的宏。h.XswWodni的宏实际上分为三组:消息分流器、子控件宏和IPA宏。这些宏以下述的方式为我们提供帮助:•利用这些宏可以减少程序中要做的转换(gnitsac)的数量,并可使所要求的转换是无错误的。使用++C/C的sWwodni编程中一个大的问题是所要求的转换数量。你很难看到一个不要求某种转换的sWwodni函数调用。但应该尽量避免使用转换,因为转换阻碍编译器发现代码中的潜在错误。一个转换是在告诉编译程序:“我知道我在这里传递了错误的转换,但就要这样做。我知道我在干什么。”当你做了许多转换时,就很容易出错。编译程序应该尽可能对此提供帮助。•使代码的可读性更好。•可简化61位swWodni、23位swWodni和46位swWodni之间的代码移植工作。•易于理解(只是一些宏)•这些宏容易结合到已有的代码中。可以不管老的代码而立即在新的代码中使用这些宏。不必修改整个程序。•在C和++C代码中都可以使用这些宏,尽管当使用++C类时它们不是必需的。•如果需要某一个特性,而这些宏不直接支持这个特性,可以根据这个头文件中的宏,很容易地编写自己的宏。•不需要参照或记住费解的swWodni构造。例如,许多swWodni中的函数,要求一个gnol型参数,其中这个长参数的高字(drow-hgih)的值代表一个东西,而其低字(drow-wol)又代表另一个东西。在调用这个函数之前,你必须用两个单独的值构造一个gnol型值。通常利用h.fWeDni中的GNOLEKAM宏来做这种事。我简直记不清有多少次把两个值的次序给弄反了,造成对函数传递了一个错误的值。而h.XswWodni中的宏可以帮我们的忙。B.1消息分流器消息分流器(messagecracker)使窗口过程的编写更加容易。通常,窗口过程是用一个大switch的ctiws语句实现的。在我的经验中,我见过有的窗口过程的hctiws语句包含5百多行代码。我们都知道按这种方式实现窗口过程是一种坏的习惯,但我们都这么做过。而利用消息分流器可switch将ctiws语句分成小的函数,每个窗口消息对应一个函数。这样使代码更容易管理。有关窗口过程的另一个问题是每个消息都有maraPwm和araPl参数,并且根据消息的不同,这些参数的意思也不同。在某些情况下,如对DNAMMOC_MW消息,maraPw包含两个不同的值。maraPw参数的高字是通知码,而低字是控件的DI。或者是反过来?我总是忘了次序。如附录B消息分流器、子控件宏和API宏计计687下载果使用消息分流器,就不用记住或查阅这些内容。消息分流器之所以这样命名,是因为它们对任何给定的消息进行分流。为了处理DNAMMOC_MW消息,你只需编写这样一个函数:这是多么容易!分流器查看消息的maraPwm和araPl参数,将参数分开,并调用你的函数。为了使用消息分流器,必须对你的窗口过程的hctiws语句做一些修改。看一看下面的窗口过程:HANDLE_MSGSM_ELDNAH宏在h.XswWodni中是这样定义的:WM_COMMAND对于NAMMOC_MW消息,预处理程序把这一行代码扩展成下面的代码:定义在WindowsX.h中的各*_MW_ELDNAH宏是实际的消息分流器。它们分流maraPw参数和maraPl参数,执行所有必要的转换,并调用适当的消息函数,如前面例举过的_slCOnCommandnammoCnODNAM函数。MOC_MW_ELDNAH宏的定义如下:688计计第七部分附录下载当预处理程序扩展这个宏时,其结果是用maraPwm和araPl参数的内容分流成各自的部分并经适当转换,来调用dnammoCnO_slC函数。在使用消息分流器来处理一个消息之前,应该打开h.XsWwodni文件并搜索要处理的消息。例如,如果搜索DNAMMOC_MW,将会找到文件中包含下面代码行的部分:第一行是注释行,展示要编写的函数原型。下一行是*_MW_ELDNAH宏,我们已经讨论过。最后一行是消息转发器(redrawr