读书人

PostMessage和:PostMessage的区别?解

发布时间: 2012-02-06 15:52:44 作者: rapoo

PostMessage和::PostMessage的区别?
看到网上有好多关于“SendMessage和PostMessage的区别”的资料。
但是,找了好长时间也没有找到PostMessage和::PostMessage这两个函数的区别的资料。高手能否指点一下MFC的PostMessage和windows API的::PostMessage到底在功能和用法上有什么区别,在什么情况下该用哪个?

[解决办法]
postmessage 是在CWnd及其派生的类中使用,其他时候使用::PostMessage当然第一种情况也可以使用这个.
[解决办法]
PostMessage的定义是这样的:
_AFXWIN_INLINE BOOL CWnd::PostMessage(UINT message, WPARAM wParam, LPARAM lParam)
{ ASSERT(::IsWindow(m_hWnd)); return ::PostMessage(m_hWnd, message, wParam, lParam); }

所以在Release下,它和::PostMessage完全等价,所以能用PostMessage就不要用::PostMessage了,因为前者少一个参数,输入快。以前我也有疑问,以为用PostMessage会损失效率,结果未必,MFC的东西并不总是慢,有些时候他们与API等价的快!
[解决办法]
我们的这个项目中一般都用::PostMessage。估计是考虑到在线程中能够直接向某个窗体发送消息。用PostMessage则依赖于特定的窗体对象。
[解决办法]
PostMessage:不需要指定接收消息的窗口,但是消息只能发往本窗口
::PostMessage:需要指定接收消息的窗口,但是消息可以发往任意窗口
楼上的问题就要使用::PostMessage
[解决办法]
仅仅是封装了一下:比如:
a.h文件:
class CWnd
{
PostMessage(....);
}
b.h文件:
PostMessage(....);
c.h文件
class CDialog : CWnd
{
void A();
};
c.cpp文件
void CDialog::A()
{
::PostMessage(..);//调用的是b.h
PostMessage(..);//调用的是a.h
}
只是一般来说:PostMessage(..);会多一个消息窗口的参数。

PostMessage:不需要指定接收消息的窗口,但是消息只能发往本窗口
::PostMessage:需要指定接收消息的窗口,但是消息可以发往任意窗口
[解决办法]
呵呵,楼上的兄弟应该先看看windows API 和 MFC之后再回答这个问题。
::PostMessage是windows API 的函数,而PostMessage是MFC的函数,其实就是对::PostMessage进行了一下封装
[解决办法]
sendmessage 是发了就算了 postmessage要扔到消息队列去的
[解决办法]
楼上的。。。发了就算了和扔到队列去有什么区别?
sendmessage是发送后需要等待处理后返回。
postmessage发送后无需等待立即返回。
[解决办法]
::PostMessage:Windows API
CWnd::PostMessage,CWnd类的成员函数,hwnd用的CWnd::GetSafeHWND(),最后还是调用
API。

读书人网 >VC/MFC

热点推荐