首页 > 其他 > 详细

关于SendMessage和PostMessage的理解的例子

时间:2016-01-10 19:59:15      阅读:248      评论:0      收藏:0      [点我收藏+]

对于SendMessage 和 PostMessage 平时口头的解释是

SendMessage 发送消息后等待返回,

PostMessage 发送消息后立即返回 。

 

但是这样解释还是不具体,什么叫等待 什么叫立即?

 

下面的代码可以解释,SendMessage 必须要等到消息响应函数结束,才继续执行。

#define USER_MSG WM_USER+1

/*使用SendMessage的例子 程序执行的步骤 */
void fun()
{
// 第一步
     SendMessage(hWnd,USER_MSG);
// 第三步
     return;
    
}

void OnUserMesssage()
{
// 第二步
   do sth;
}

 

/*使用PostMessage*/
#define USER_MSG WM_USER+1
void fun()
{
//第一步
    PostMessage(hwnd,USER_MSG) ;
//第二步
    return;
}

//不知道是第几步,等待消息队列轮到USER_MSG消息被捕获。
void OnUserMsg()
{
//等待窗口的后台消息处理过程通过GetMessage 取出了消息之后,再执行。
}

 

那么为什么要有这样的区分?

 

场景1,在OnCreate 消息中,获取子窗口的位置。

因为窗体以及其子窗口在OnCreate的时候还没有创建完成,(收到了一个WM_CREATE消息)

此时,获取子窗口的的位置是不可靠的。所以,可以在OnCreate 处理函数中,

向窗口以PostMessage发送一个自定义消息,等自定义消息响应时,OnCreate已经完成了。在自定义消息中获取到子窗口的准确位置。

 

场景2,使用采集卡的例子中,当用户发送采集信息,主程序需要得到一个图片之后才继续执行。那么就可以用SendMessage 来通知采集卡采图。

如果用PostMessage,那么可能得到的是延迟一段时候后的图。

 

关于SendMessage和PostMessage的理解的例子

原文:http://www.cnblogs.com/songr/p/5118979.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!