关于SendMessage和PostMessage

本文介绍了SendMessage和PostMessage函数的区别,SendMessage是阻塞的,需等消息处理完才返回,PostMessage则将消息放入队列就返回。还指出MFC中从CWnd继承类的成员函数与Windows SDK中的这两个函数存在差异,并以PostMessage为例说明使用时的注意事项及正确用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

发信人: ChandlerBing (Chandler), 信区: VC
标  题: 关于SendMessage和 PostMessage
发信站: 武汉白云黄鹤站 (2005年12月05日16:26:47 星期一), 站内信件

首先讲这两个函数的区别。SendMessage是阻塞的。PostMessage不是的。SendMessage会等

发去的消息被处理了才返回。PostMessage则只负责把消息放到相应的消息队列中就返回了,

它不必等待消息的处理。

在使用上有一个要注意的地方。

在MFC中每个从CWnd继承来的类,都有两个成员函数SendMessage,PostMessage。

在Windows SDK中也有两个函数SendMessage,PostMessage。这是有区别的。

下面均以PostMessage为例来说明。

Windows SDK中的PostMessage有四个参数

BOOL PostMessage(

   HWND hWnd,

   UINT Msg,

   WPARAM wParam,

   LPARAM lParam

);

但是CWnd的成员函数PostMessage只有三个参数

BOOL PostMessage(

   UINT message,

   WPARAM wParam = 0,

   LPARAM lParam = 0

);

Windows SDK中的PostMessage的第一个参数就是发送消息的目的窗口的句柄。

而CWnd的PostMessage则把消息发送到本窗口对象的消息队列里。

前面有位同学的关于消息的提问,说他发送的消息,收不到,就是没有注意到这些区别。

它直接使用成员函数PostMessage就想把菜单消息发送到另一个窗口中,让处理菜单命令的

那个窗口处理菜单消息,显然消息是发送到了本窗口对象的消息队列里,而本窗口对象又不

处理该菜单命令。

正确的使用方法应该是:

(1)用目的窗口对象的成员函数PostMessage

(2)使用SDK中的PostMessage,并在第一个参数上写上目的窗口的句柄

    比如:PostMessage(pWnd->GetSafeHwnd(),......

    需要注意的是,这时候最好写成::PostMessage(pWnd->GetSafeHwnd(),......形式


    以区别成员函数PostMessage。::的意思不用讲了吧,如果不懂,看C++去吧


--

※ 来源:·武汉白云黄鹤站 bbs.whnet.edu.cn·[FROM: Friends]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值