不要使用PostMessage发行带指针参数的消息

来源:互联网 发布:淘宝店铺首页的模板 编辑:程序博客网 时间:2024/05/18 21:42

我们知道PostMessage与SendMessage不同,它是一个非同步发送消息的函数,即它发送了消息以后,并没有办法知道消息是不是被处理了。所以当使用PostMessage给本线程的窗口发送消息时,这个消息将会在下次GetMessage的时候得到并处理,所以类似下面的代码是很危险的

LRESULT WndProc(HWND hwnd ...)

{

       ......

 

       TCHAR buf[] = "Win32";

       PostMessage(hwnd , WM_SETTEXT, NULL ,buf);

}

因为当下次GetMessage处理WM_SETTEXT的时候,buf所在的内存已经无效了。

所以当PostMessage发送的是值小于WM_USER的windows自带消息的时候,如果该消息的参数有指针,那么PostMessage会立即失败而不做任何发送消息的工作。