发信人: 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]
|
|