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

Krypt($120/年),2vCPU/2GB/60GB SSD/3TB

Krypt这两天发布了ION平台9月份优惠信息,提供一款特选套餐年付120美元(原价$162/年),开设在洛杉矶或者圣何塞机房,支持Windows或者Linux操作系统。ion.kryptcloud.com是Krypt机房上线的云主机平台,主要提供基于KVM架构云主机产品,相对于KT主站云服务器要便宜很多,产品可选洛杉矶、圣何塞或者新加坡等地机房。洛杉矶机房CPU:2 cores内存:2GB硬盘:...

Stablehost 美国主机商黑五虚拟主机四折

如今我们网友可能较多的会选择云服务器、VPS主机,对于虚拟主机的话可能很多人不会选择。但是我们有些外贸业务用途的建站项目还是会有选择虚拟主机的。今天看到的Stablehost 商家虚拟主机在黑五期间也有四折优惠,对于这个服务商而言不是特别的喜欢,虽然他们商家和我们熟悉的老鹰主机商有些类似,且在后来老鹰主机改版和方案后,Stablehost 商家也会跟随改版,但是性价比认为不如老鹰主机。这次黑色星期...

HostKvm(4.25美)香港和俄罗斯高防机房云服务器

HostKvm 商家我们算是比较熟悉的国内商家,商家主要还是提供以亚洲数据中心,以及直连海外线路的服务商。这次商家有新增香港和俄罗斯两个机房的高防服务器方案。默认提供30GB防御,且目前半价优惠至4.25美元起步,其他方案的VPS主机还是正常的八折优惠。我们看看优惠活动。香港和俄罗斯半价优惠:2021fall,限购100台。通用优惠码:2021 ,八折优惠全部VPS。我们看看具体的套餐。1、香港高...

sendmessage为你推荐
巴西时区巴西与中国的时差是多少最好的视频播放器目前最好的视频播放器是什么?色温图led色温6000k显示是什么颜色呢?微店是什么微店和微商有什么区别呢微信收费微信提现收费是怎么计算的 从什么时候开始收费免杀远控求最新的免杀远控 收费没关系 主要是实用 键盘记录 屏幕控制 功能多得 骗子别来找骂没有nvidia控制面板没有nvidia控制面板有什么用3d规则福彩3D的规则是怎么样的刷荣誉怎么刷荣誉最快最快?scanf字符串scanf输入字符串和gets输入字符串有什么区别
七牛优惠码 电信测速器 sharktech 香港bgp机房 光棍节日志 本网站服务器在美国 毫秒英文 umax120 酷番云 重庆电信服务器托管 lamp兄弟连 注册阿里云邮箱 金主 免费php空间 乐视会员免费领取 谷歌搜索打不开 标准机柜 weblogic部署 热云 日本小学生 更多