一值沒有注意這問題,這兩個都在隨性亂用,這次還真的用出問題了。
BOOL PostMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to post
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
LRESULT SendMessage(
HWND hWnd, // handle of destination window
UINT Msg, // message to send
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
);
內容都一樣,那我們來比較傳回值,SendMessage的傳回值是LRESULT、PostMessage的傳回直是bool,這意義重大啊!!關鍵都在這邊。
先說他們的用意:
SendMessage用在你需要馬上知道這個Message處理的結果,而
PostMessage只是把訊息丟入Message Queue會在下次進入訊息迴圈時才處理,傳回的bool只是跟你說,我這個函式有沒有執行成功,也就是說我們不管它到底什麼時候被處理,他有處理就好
所以深入來說,SendMessage就是當執行後會馬上去處理這個訊息,控制權會馬上交給接受Message的視窗(看你傳的hWnd),然後等他處理完該訊息,所以這個Message不會直接送給Message Queue。所以會傳回LRESULT,來讓我知道這訊息處理的怎樣。
我遇到的問題就是我很多地方都用SendMessage,變成有些東西被銷毀的時間點不對,導致整個程式最後會崩潰,其實還蠻糟糕的,現在終於發現這個地方了。
請問一下我想要用 api 控制另外一個程式的 checkBox 希望把勾
勾打上去但是為何不會有反應??
SendMessage(hwnd,BM_SETCHECK,BST_CHECKED,0);