PostMessage和SendMessage有什么区别

 我来答
蘑菇饭资讯
2014-11-09 · TA获得超过6万个赞
知道大有可为答主
回答量:1.7万
采纳率:90%
帮助的人:1.2亿
展开全部
其实你在网上搜索一下就可以找到很多答案!难道网上的回答都满足不了你,那你指望我们就能让你理解吗?

我把我的理解说一下,希望你懂。
1.SendMessage你就把他理解为调用窗口过程函数即可。
LRESULT CALLBACK WindowProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
这个好懂吧!把他们等同即可,SendMessage就是 调用WindowProc,SendMessage的返回值就是WindowProc的返回值。

2。PostMessage就比较麻烦。
PostMessage后,系统会把消息放在程序的消息队列。
之后消息循环(这个在win32程序经常看到的)
While(GetMessage(。。。。))

。。。。
DispatchMessage(。。。);


GetMessage会获取到这个消息。
(对于很多初学者来说这个GetMessage确实不要理解,
因为它跟我们平常的程序代码执行思想很不同。
Getmessage有时会堵塞,程序会停在那里。
它什么时候被调用,谁调用它呢?--其实这都是系统的事,
系统发现程序的消息队列有消息了,就会让你的程序调用
Getmessage,把消息取出来,while循环继续执行,到
DispatchMessage时就可以把它等同于调用窗口过程函数
WindowProc了。

整理一下思路就是:
PostMessage=
消息进入消息队列-》GetMessage把消息取出来-》程序执行到DispatchMessage-》DispatchMessage就相当于调用窗口过程函数了

所以2个函数最后都会去调用窗口过程函数,只是PostMessage调用前要经历一些“曲折”的步骤。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式