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 参考资料来源:百度百科-PostMessage

sendmessage这个发送消息的函数如何发送字符串

首先说怎么发送,然后说怎么接收: 自己定义一个消息,加上一个消息响应函数。

然后用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消息处理失败,则会造成程序停止!

青果云(59元/月)香港多线BGP云服务器 1核 1G

青果云香港CN2_GIA主机测评青果云香港多线BGP网络,接入电信CN2 GIA等优质链路,测试IP:45.251.136.1青果网络QG.NET是一家高效多云管理服务商,拥有工信部颁发的全网云计算/CDN/IDC/ISP/IP-VPN等多项资质,是CNNIC/APNIC联盟的成员之一。青果云香港CN2_GIA主机性能分享下面和大家分享下。官方网站:点击进入CPU内存系统盘数据盘宽带ip价格购买地...

月神科技-美国CERA 5折半价倒计时,上新华中100G高防云59起!

官方网站:点击访问月神科技官网优惠码:美国优惠方案:CPU:E5-2696V2,机房:国人热衷的优质 CeraNetworks机房,优惠码:3wuZD43F 【过期时间:5.31,季付年付均可用】活动方案:1、美国机房:洛杉矶CN2-GIA,100%高性能核心:2核CPU内存:2GB硬盘:50GB流量:Unmilited端口:10Mbps架构:KVM折后价:15元/月、150元/年传送:购买链接洛...

incogne$2.5/月t芬兰VPS,AMD Ryzen、1Gbps带宽

IncogNet LLC是个由3个人运作的美国公司,主要特色是隐私保护,号称绝对保护用户的隐私安全。业务涵盖虚拟主机、VPS等,支持多种数字加密货币、PayPal付款。注册账号也很简单,输入一个姓名、一个邮箱、国家随便选,填写一个邮箱就搞定了,基本上不管资料的真假。当前促销的vps位于芬兰机房,全部都是AMD Ryzen系列的CPU,性能不会差的!5折优惠码:CRYPTOMONTH,支持:BTC,...

sendmessage为你推荐
安全防护谈谈你对自我安全防护的看法,如何保障自身安全和企业安全?wizardryHogwarts for pikeys是什么意思???高质量图片iphone上有什么高质量的壁纸APP吗蓝牙开发iOS的蓝牙开发跟Android有什么不同vrrp配置INTERNET协议属性里面的备用配置有什么用?团购网源码最近看到团购挺火的,我也想做一个,请大家推荐个稳定的团购网站源码?比特币官方客户端bitcoin cash(BCC)是什么比特币官方客户端比特币钱包官方客户端地址是什么?blacken“人非圣贤孰能无过”用英语怎么说廖华100个成语典故及其历史人物故事 南京廖华
日本动态vps a5域名交易 服务器配置技术网 windows主机 128m内存 2017年黑色星期五 河南服务器 免费网站申请 免费mysql 河南移动邮件系统 bgp双线 域名转接 鲁诺 卡巴斯基破解版 免费私人服务器 drupal安装 申请网站 1元域名 台湾google 监控服务器 更多