我試圖檢驗該「檢查消息隊列」在當前頁例如:的PeekMessage問題
http://msdn.microsoft.com/en-us/library/ms644928(VS.85).aspx
爲了測試它我創建與編輯控件和一些按鈕的簡單窗口,
但如我所料,它應該重複顯示字符串「某些文本」在EditControl直到
我按下一個按鈕,它不工作......但問題是,它顯示的字符串僅在第一次然後它似乎阻止PeekMessage循環。
我注意到放置一個DispatchMessage(&味精)後來調用,它似乎工作正常。
我該如何解決?我是否必須打電話給DispatchMessage(&味精)?
謝謝!
HWND hwnd; BOOL fDone; MSG msg; fDone = FALSE; while (!fDone) { SetFocus(EditControl); SendMessage(EditControl, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)TEXT("Some Text\r\n")); while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) // It blocks here, if I press any button it always sets fDone to TRUE without exiting the loop { // DispatchMessage(&msg); uncomment this and it works switch(msg.message) { case WM_LBUTTONDOWN: case WM_RBUTTONDOWN: case WM_KEYDOWN: { fDone = TRUE; SetFocus(EditControl); SendMessage(EditControl, EM_REPLACESEL, (WPARAM)FALSE, (LPARAM)TEXT("fDone set to TRUE\r\n")); } } } }
是的,它從窗口過程調用, 因此,如果我明白:每次我調用PeekMessage()我必須調用DispatchMessage()? 但PeekMessage不自動調度消息?來自MSDN的 :「調度傳入的已發送消息」 – Mario 2010-08-06 16:36:08
調度*已發送*消息。與*發佈*消息不同。 WM_PAINT已發佈,未發送。你玩的例子是*不是很棒,沒有人會這樣做。 – 2010-08-06 16:47:23
好的謝謝你的回覆,最後一件事:爲什麼沒有人這樣做?什麼是替代方案? – Mario 2010-08-06 16:55:05