PostMessage和SendMessage有什么区别
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调用前要经历一些“曲折”的步骤。
我把我的理解说一下,希望你懂。
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调用前要经历一些“曲折”的步骤。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询