[問題] MFC 在 Thread 中使用控件的相關問題

看板C_and_CPP (C/C++)作者 (sd016808)時間10年前 (2015/06/11 20:39), 10年前編輯推噓0(0019)
留言19則, 4人參與, 最新討論串1/1
開發平台(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

06/12 12:32, , 1F
GOOGLE: mfc thread update ui
06/12 12:32, 1F

06/12 13:26, , 2F
大部分的文章都說用送訊息的方式去修改UI 是否代表會改
06/12 13:26, 2F

06/12 13:26, , 3F
變畫面的部分都透過送訊息的方式 而純粹讀取控件的資料
06/12 13:26, 3F

06/12 13:26, , 4F
的部分可以直接在thread中使用 其實我分不太清楚什麼時
06/12 13:26, 4F

06/12 13:26, , 5F
候要透過訊息 什麼時候可以直接用 另外透過fromhandle可
06/12 13:26, 5F

06/12 13:26, , 6F
以直接使用空間的原因 是否是因為它在thread裡建立的一
06/12 13:26, 6F

06/12 13:26, , 7F
個暫存的對應關係(HWnd to CWnd) 讓CWnd不為空 所以Asse
06/12 13:26, 7F

06/12 13:27, , 8F
rt才不會出現?
06/12 13:27, 8F

06/12 16:33, , 9F
mfc 把對應關係的 handle map 存在 TLS 裡面, 通常 assert
06/12 16:33, 9F

06/12 16:34, , 10F
應該都是用來確認它沒有跨執行序使用 (跨了 TLS 就找不到)
06/12 16:34, 10F

06/12 16:35, , 11F
FromHandle 傳回來的只是一個 CTempWnd 相當於 CWnd
06/12 16:35, 11F

06/12 16:36, , 12F
如果你有一個 class 繼承 CWnd 然後用它傳回物件, 想存取
06/12 16:36, 12F

06/12 16:37, , 13F
那個 class 特有的資料會引發錯誤, 這是因為 CTempWnd 沒
06/12 16:37, 13F

06/12 16:37, , 14F
有那些多出來的資料造成的
06/12 16:37, 14F

06/12 18:14, , 15F
感謝F大一語驚醒夢中人!
06/12 18:14, 15F

06/12 18:15, , 16F
另外我非常推薦這篇文章
06/12 18:15, 16F

06/12 18:15, , 17F
Inside_MFC_Handle_Maps_and_Temporary_Objects
06/12 18:15, 17F

06/12 18:19, , 18F
裡面解釋了很多之前不了解的疑問
06/12 18:19, 18F

06/13 02:33, , 19F
MFC的source code完全是公開的,有興趣自己看
06/13 02:33, 19F
文章代碼(AID): #1LUO5xoR (C_and_CPP)
文章代碼(AID): #1LUO5xoR (C_and_CPP)