sendmessagePostMessage和SendMessage有什么区别?
sendmessage 时间:2021-08-08 阅读:(
)
postmessage和sendmessage有什么区别?
它们的区别是: SendMessage( )直接把一个消息发送给窗口过程,等消息被处理后才返回。
PostMessage( )只是把消息发送到消息队列,然后立即返回。
PostMessage和SendMessage的区别
一、主体不同
1、SendMessage:将指定的消息发送到一个或多个窗口。
2、PostMessage:是Windows API(应用程序接口) 中的一个常用函数,用于将一条消息放入到消息队列中。
二、特点不同
1、SendMessage:为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。
2、PostMessage:将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回,是异步消息模式。
三、规则不同
1、SendMessage:指定要接收消息的窗口的句柄。
如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
2、PostMessage:消息被寄送到系统的所有顶层窗口,包括无效或不可见的非自身拥有的窗口、 被覆盖的窗口和弹出式窗口。
消息不被寄送到子窗口。
参考资料来源:百度百科-SendMessage
参考资料来源:百度百科-PostMessagesendmessage这个发送消息的函数如何发送字符串
首先说怎么发送,然后说怎么接收:
自己定义一个消息,加上一个消息响应函数。
然后用SendMessage把字符串的地址发过去。
比如VC环境:
在stdafx.h中,
#define MY_MESSAGE USER+1
定义一个函数用来发送,可以是定时器,可以是按钮。
void send()
{
CString str;
str = "12345";
::SendMessage(hWnd,MY_MESSAGE ,(WPARAM)&str);
}
在你的类头文件.h中:
afx_msg void MyFunction(WPARAM wParam,LPARAM lParam);
在.cpp中
BEGIN_MESSAGE_MAP下面加入:
ON_MESSAGE(MY_MESSAGE ,MyFunction)
在后面加上你的函数体
void 你的类名::MyFunction(WPARAM wParam,LPARAM lParam)
{
//如果你发送的字符串的地址在WPARAM中,则用WPARAM来接收
CString* pStr = (CString*)wParam.
AfxMessageBox(*pStr);
}
你要注意的是:这只能适合SendMessage,如果你要使用PostMessage,就要把你发送的字符串设定为类的成员,或者全局的,不能是临时变量。
因为SendMessage是要让消息响应函数执行完了才会返回,所以str是不会被系统释放的。
PostMessage是直接返回,于是你传了一个str的地址过去,但是消息响应函数执行的时候,str已经被删除了,这个时候的地址是一个不可知的内容,程序就会发生内存泄露,所以还是推荐你定义一个字符串专门用来发送。
PostMessage和SendMessage有什么区别?
在控制别的应用程序的时候,经常需要等待直到某个功能结束,例如:
打开一个窗口-->等待直到窗口结束
这个时候就可以用到SendMessage
如果在打开这个窗口后仍然需要对该窗口的界面进行设置,比如Edit的value等等,比如:
打开一个窗口-->控制窗口的control的属性
这个时候就需要PostMessage使用一个钩子程序截获消息后,使用SendMessage把消息发送到主处理程序进行处理,但是在主处理程序还没有完成任务的时候,被设置钩子的程序进入了停止的状态,不可以处理WM_PAINT,
WM_MOVE,
.......等的基本信息,
必须要等SendMessage发送出的消息完成后,才能继续运行,整个界面一片空白,把钩子消息设置成PostMessage的发送消息形式后,问题解决!
我查了MSDN对这两个API的定义,
PostMessage只是把消息放入队列,不管其他程序是否处理都返回,然后继续执行;
而SendMessage必须等待其他程序处理消息后才返回,继续执行。
PostMessage的返回值表示PostMessage函数执行是否正确;
而SendMessage的返回值表示其他程序处理消息后的返回值。
使用这两个发送消息函数的最重要的是要看你的程序是否要对消息的滞后性关注否,PostMessage会造成消息的滞后性,而SendMessage则不会,但如果SendMessage消息处理失败,则会造成程序停止!
官方网站:点击访问白丝云官网活动方案:一、KVM虚拟化套餐A1核心 512MB内存 10G SSD硬盘 800G流量 2560Mbps带宽159.99一年 26一月套餐B1核心 512MB内存 10G SSD硬盘 2000G流量 2560Mbps带宽299.99一年 52一月套餐...
在2014年发现原来使用VPS的客户需求慢慢的在改版,VPS已经不能满足客户的需求。我们开始代理机房的独立服务器,主推和HS机房的独立服务器。经过一年多的发展,我们发现代理的服务器配置参差不齐,机房的售后服务也无法完全跟上,导致了很多问题发生,对使用体验带来了很多的不便,很多客户离开了我们。经过我们慎重的考虑和客户的建议。我们在2015开始了重大的改变, 2015年,我们开始计划托管自己...
青云互联怎么样?青云互联是一家成立于2020年的主机服务商,致力于为用户提供高性价比稳定快速的主机托管服务,目前提供有美国免费主机、香港主机、韩国服务器、香港服务器、美国云服务器,香港安畅cn2弹性云限时首月五折,15元/月起;可选Windows/可自定义配置,让您的网站高速、稳定运行。点击进入:青云互联官方网站地址青云互联优惠码:八折优惠码:ltY8sHMh (续费同价)青云互联香港云服务器活动...
sendmessage为你推荐
extractdata扩展名为xp3是什么文件seasonalholiday 和weekend seasonal activities 有什么区别diskgenius免费版diskgenius 破解版?安卓模拟器哪个好用电脑上的手机模拟器有哪些?哪个更好一点?电子听诊器听诊器的原理赵锡成著名的美籍华人有哪些微店是什么微店和微商有什么区别呢武汉教育云平台武汉天喻教育科技有限公司怎么样?印度it为什么说在IT印度远远领先中国水平?spinmaster会飞的小仙女玩具什么品牌
域名停靠 免费域名空间申请 免费申请网页 特价空间 gateone 表格样式 青果网 typecho 嘟牛 百度云1t 安徽双线服务器 新睿云 路由跟踪 lamp兄弟连 hdchina cx域名 免费网站加速 删除域名 asp简介 easypanel 更多