有誰知道哪裏是最好的地方轉發線程消息到子控件?在哪裏分組線程捕獲WINAPI/MFC
基本上,應用程序必須捕獲範圍msg_frst ... msg_last中的註冊線程消息,並將它們轉發到活動幀/視圖。
有3個過載點MFC,或者看起來是這樣: DefWndProc OnWndMessage 的PreTranslateMessage
哪一個是正確的覆蓋?
有誰知道哪裏是最好的地方轉發線程消息到子控件?在哪裏分組線程捕獲WINAPI/MFC
基本上,應用程序必須捕獲範圍msg_frst ... msg_last中的註冊線程消息,並將它們轉發到活動幀/視圖。
有3個過載點MFC,或者看起來是這樣: DefWndProc OnWndMessage 的PreTranslateMessage
哪一個是正確的覆蓋?
使用PostThreadMessage()發佈的消息具有NULL窗口句柄。因此,忘掉任何窗口方法,DispatchMessage()不會傳遞它們。你得到的只是CWinThread :: PreTranslateMessage()。
但是這裏有一個很大的危險,當該線程中的任何代碼開始抽取它自己的消息循環時,這不會再被調用。您的消息現在落在了位桶中,因爲其他代碼現在正在調用Peek/GetMessage()。那麼你認爲這很有可能,MessageBox()就足夠了。或COM模式循環。等等。
您只能安全地使用PostThreadMessage()將消息發送到而不是創建自己的任何窗口的線程。解決方法很簡單,爲線程提供一個窗口句柄,以便它可以調用PostMessage()。例如,這可能是一個隱藏窗口,專門用於處理這些消息。
哇,沒想到它:(現在我完全卡住了傳遞給孩子窗口的消息... – Coder 2010-11-17 17:16:14
哇,在這個巨大的痛苦下,我幫你解決了這個問題。 ? – 2010-12-02 23:23:19