首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

前面已经学习了关于消息的基本知识,那么消息到底是怎么在系统和应用之间、应用与应用之间以及窗口与窗口之间进行传输的呢?消息传输的方式可以分为两种:寄送和发送。本节主要讨论这两种消息传送方式。

6.2.1  消息的寄送

寄送一个消息时,把消息发送到拥有那个窗口的应用程序的消息队列中。当应用发现自己有空闲时,它就搜索消息队列,并在消息队列中处理消息,即从队列中删除它们,并将它们发送到指定的窗口。

MFC寄送一个消息的方法是:首先获取接收消息的CWnd类对象的指针;然后,调用CWnd的成员函数PostMessage()。如前所述,该函数寄送消息即刻返回,其返回值放在Res中,它仅标志寄送成功与否。

 

LRESULT Res=pWnd->PostMessage(UINT MsgWPARAM wParamLPARAM lParam)

 

pWnd指针是指向目标CWnd类对象。变量Msg是消息,wParamlParam变量是包含消息的参数,如鼠标单击哪里或选择了什么菜单项。发送消息到一个没有CWnd类对象的窗口,可以用下列目标窗口的句柄直接调用WindowsAPI

 

LRESULTRes=:: PostMessage (HWND hWndUINT MsgWPARAM wParamLPARAM lParam)

 

其中hWnd是目标窗口的句柄。

6.2.2  消息的发送

发送一个消息时,消息不进入目标窗口的消息队列,本质上与直接调用窗口处理过程一样,就好像它是另一个函数,所以通信是即时的。直到窗口过程为调用函数返回一个结果后,应用程序才能继续运行。其具体的调用方式与寄送消息时类似,然而消息发送是调用SendMessage而不是PostMessage函数。另外,返回结果也不太一样,它返回的是由目标窗口的窗口过程处理而得到的结果,这里不再赘述。

 

说明

实践中开发人员可以根据寄送和传送的特点,结合所要实现的目标可以采取相应的传送方式,如果没有特殊要求则可以随意选取二者中的任何一种。