PostMessage和SendMessage有什么区别

2025-02-25 21:47:52
推荐回答(1个)
回答1:

其实你在网上搜索一下就可以找到很多答案!难道网上的回答都满足不了你,那你指望我们就能让你理解吗?

我把我的理解说一下,希望你懂。
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调用前要经历一些“曲折”的步骤。