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

PQ.hosting全线9折,1Gbps带宽不限流量VPS/€3/月,全球11大机房可选

Hostadvice主机目录对我们的服务进行了测试,然后给PQ.hosting颁发了十大WordPress托管奖。为此,宣布PQ.Hosting将在一周内进行折扣优惠,购买和续订虚拟服务器使用优惠码:Hostadvice ,全部优惠10%。PQ.hosting,国外商家,成天于2019年,正规公司,是全球互联网注册商协会 RIPE 的成员。主要是因为提供1Gbps带宽、不限流量的基于KVM虚拟的V...

什么是BGP国际线路及BGP线路有哪些优势

我们在选择虚拟主机和云服务器的时候,是不是经常有看到有的线路是BGP线路,比如前几天有看到服务商有国际BGP线路和国内BGP线路。这个BGP线路和其他服务线路有什么不同呢?所谓的BGP线路机房,就是在不同的运营商之间通过技术手段时间各个网络的兼容速度最佳,但是IP地址还是一个。正常情况下,我们看到的某个服务商提供的IP地址,在电信和联通移动速度是不同的,有的电信速度不错,有的是移动速度好。但是如果...

月神科技:香港CN2/洛杉矶CN2/华中电信高防vps,月付20元起

月神科技怎么样?月神科技是由江西月神科技有限公司运营的一家自营云产品的IDC服务商,提供香港安畅、香港沙田、美国CERA、华中电信等机房资源,月神科技有自己的用户群和拥有创宇认证,并且也有电商企业将业务架设在月神科技的平台上。目前,香港CN2云服务器、洛杉矶CN2云主机、华中电信高防vps,月付20元起。点击进入:月神科技官方网站地址月神科技vps优惠信息:香港安畅CN2-GIA低至20元核心:2...

sendmessage为你推荐
笛卡尔乘积笛卡尔乘积的运算性质provisionedwindows server 2012 R2系统中,哪种方法可以增加thin provisioned磁盘大小?逗号运算符c语言中逗号运算符是从左向右算,还是从右向左算啊aftereffectafter effect (AE)有哪几层,层有哪些属性?作用是什么?巴西时区巴西与中国的时差是多少diskgenius免费版diskgenius 破解版?电子听诊器怎样选择听诊器阶乘函数阶乘怎么算?vrrp配置路由器的配置子模式有哪些充值卡充值买完充值卡了,怎么充值
上海虚拟主机 域名信息查询 ip查域名 域名查询软件 国外免费域名网站 精品网 外国服务器 shopex空间 网站保姆 12306抢票助手 html空间 国外在线代理 e蜗牛 52测评网 网络空间租赁 美国网站服务器 万网主机管理 登陆空间 www789 徐州电信 更多