我们知道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会立即失败而不做任何发送消息的工作。