看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) MFC 問題(Question): 1.在使用AfxBeginThread()時,到底是傳this進去還是傳this->GetSafeHwnd()比較好? 2.如果傳this,要如何知道哪些關於控件的function不能使用? Ex:UpdateData().. P.S.我知道可以透過SendMessage()去做UpdateData() 3.如果傳HWND,透過FromHandle去拿CWnd,控件的function可以使用。Ex:UpdateData() 但是呼叫AfxBeginThread()的class本身的成員變數卻都沒辦法使用了。Ex:CString... 這樣是正常的嗎? 4.一般如果在Thread裡面要用到控件,例如讀取控件的Value或者設定控件的Value,難道 都是透過送訊息的方式嗎? 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): 程式碼(Code):(請善用置底文網頁, 記得排版) http://codepad.org/2fO7YeNT 補充說明(Supplement): -- -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.250.251.164 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1434026363.A.C9B.html ※ 編輯: sd016808 (223.138.197.146), 06/11/2015 21:38:03
linotwo: GOOGLE: mfc thread update ui 06/12 12:32
sd016808: 大部分的文章都說用送訊息的方式去修改UI 是否代表會改 06/12 13:26
sd016808: 變畫面的部分都透過送訊息的方式 而純粹讀取控件的資料 06/12 13:26
sd016808: 的部分可以直接在thread中使用 其實我分不太清楚什麼時 06/12 13:26
sd016808: 候要透過訊息 什麼時候可以直接用 另外透過fromhandle可 06/12 13:26
sd016808: 以直接使用空間的原因 是否是因為它在thread裡建立的一 06/12 13:26
sd016808: 個暫存的對應關係(HWnd to CWnd) 讓CWnd不為空 所以Asse 06/12 13:26
sd016808: rt才不會出現? 06/12 13:27
firose: mfc 把對應關係的 handle map 存在 TLS 裡面, 通常 assert 06/12 16:33
firose: 應該都是用來確認它沒有跨執行序使用 (跨了 TLS 就找不到) 06/12 16:34
firose: FromHandle 傳回來的只是一個 CTempWnd 相當於 CWnd 06/12 16:35
firose: 如果你有一個 class 繼承 CWnd 然後用它傳回物件, 想存取 06/12 16:36
firose: 那個 class 特有的資料會引發錯誤, 這是因為 CTempWnd 沒 06/12 16:37
firose: 有那些多出來的資料造成的 06/12 16:37
sd016808: 感謝F大一語驚醒夢中人! 06/12 18:14
sd016808: 另外我非常推薦這篇文章 06/12 18:15
sd016808: Inside_MFC_Handle_Maps_and_Temporary_Objects 06/12 18:15
sd016808: 裡面解釋了很多之前不了解的疑問 06/12 18:19
freaky: MFC的source code完全是公開的,有興趣自己看 06/13 02:33