看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) WIN7 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) MFC2003 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 如題 小弟想要在按下某個按鈕時出現一個Dialog 由於不想讓FUNCTION裡運算的資料停下來 所以我做了一個Modeless的Dialog讓它可以邊運算邊顯示Dialog 點選按鈕後會跳出Messagebox 如果是IDOK 則出現Dialog 可能是因為create的特性出現的Dialog不是完整的(只顯示title) 餵入的資料(Input): 預期的正確結果(Expected Output): 錯誤結果(Wrong Output): Dialog 裡 CStatic 及兩個button無法顯示 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) void Function() { pModeless = new CModeless(this); pModeless->create(IDD_DIALOG); pModeless->ShowWindow(SW_HIDE); 呼叫Messagebox Switch 是否為IDOK { pModeless->ShowWindow(SW_SHOW); 計算... ... } if(pModeless != NULL) pModeless->OnCancel(); } 補充說明(Supplement): 請各位高手給小弟一點意見 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.200.146 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1527496851.A.F26.html
Schottky: 有沒有發現運算時你的整個程式都卡住不動了 05/28 21:52
asdfg1597860: 這到是沒有欸 過程滑鼠會轉圈圈 圈圈轉完dialog 05/28 23:35
asdfg1597860: 就會完全顯示計算也完成了 05/28 23:35
Schottky: 本來想寫一篇來解釋,不過剛好搜尋到板上有一篇不錯的文 05/29 03:25
Schottky: #1GnfbVvR 跟我要講的東西大致相同,可以參考看看 05/29 03:26
Schottky: 把 PeekMessage 那幾行插在ShowWindow之後以及計算中途 05/29 03:28
Schottky: 你就會看到 modeless dialog 被畫完以及進度條被更新 05/29 03:28
Schottky: 開 thread 的方法較正統,PeekMessage 法較偷懶簡便 05/29 03:30
Schottky: 簡單說就是 message queue 要有人去處理, 05/29 03:56
Schottky: 畫面才會更新,滑鼠點按鈕才會有反應等等 05/29 03:56
asdfg1597860: 謝謝Schottky大大 問題解決了 看來我對MFC架構 05/29 09:06
asdfg1597860: 不夠熟 05/29 09:06
james732: 想要熟MFC架構非常困難啊 XD 05/31 00:49
asdfg1597860: 目前我也只有套套function而已 架構還真的不了解 06/01 00:17