我們知道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會立即失敗而不做任何發送消息的工作。