前面已经学习了关于消息的基本知识,那么消息到底是怎么在系统和应用之间、应用与应用之间以及窗口与窗口之间进行传输的呢?消息传输的方式可以分为两种:寄送和发送。本节主要讨论这两种消息传送方式。
6.2.1 消息的寄送
寄送一个消息时,把消息发送到拥有那个窗口的应用程序的消息队列中。当应用发现自己有空闲时,它就搜索消息队列,并在消息队列中处理消息,即从队列中删除它们,并将它们发送到指定的窗口。
用MFC寄送一个消息的方法是:首先获取接收消息的CWnd类对象的指针;然后,调用CWnd的成员函数PostMessage()。如前所述,该函数寄送消息即刻返回,其返回值放在Res中,它仅标志寄送成功与否。
LRESULT Res=pWnd->PostMessage(UINT Msg,WPARAM wParam,LPARAM lParam);
pWnd指针是指向目标CWnd类对象。变量Msg是消息,wParam和lParam变量是包含消息的参数,如鼠标单击哪里或选择了什么菜单项。发送消息到一个没有CWnd类对象的窗口,可以用下列目标窗口的句柄直接调用WindowsAPI:
LRESULTRes=:: PostMessage (HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
其中hWnd是目标窗口的句柄。
6.2.2 消息的发送
发送一个消息时,消息不进入目标窗口的消息队列,本质上与直接调用窗口处理过程一样,就好像它是另一个函数,所以通信是即时的。直到窗口过程为调用函数返回一个结果后,应用程序才能继续运行。其具体的调用方式与寄送消息时类似,然而消息发送是调用SendMessage而不是PostMessage函数。另外,返回结果也不太一样,它返回的是由目标窗口的窗口过程处理而得到的结果,这里不再赘述。
|
|
实践中开发人员可以根据寄送和传送的特点,结合所要实现的目标可以采取相应的传送方式,如果没有特殊要求则可以随意选取二者中的任何一种。 |






