[問題]MFC 類似PROGRESSBAR的功能

作者: asdfg1597860 (Jay)   2018-05-28 16:40:48
開發平台(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):
請各位高手給小弟一點意見
作者: Schottky (順風相送)   2018-05-28 21:52:00
有沒有發現運算時你的整個程式都卡住不動了
作者: asdfg1597860 (Jay)   2018-05-28 23:35:00
這到是沒有欸 過程滑鼠會轉圈圈 圈圈轉完dialog就會完全顯示計算也完成了
作者: Schottky (順風相送)   2018-05-29 03:25:00
本來想寫一篇來解釋,不過剛好搜尋到板上有一篇不錯的文#1GnfbVvR 跟我要講的東西大致相同,可以參考看看把 PeekMessage 那幾行插在ShowWindow之後以及計算中途你就會看到 modeless dialog 被畫完以及進度條被更新開 thread 的方法較正統,PeekMessage 法較偷懶簡便簡單說就是 message queue 要有人去處理,畫面才會更新,滑鼠點按鈕才會有反應等等
作者: asdfg1597860 (Jay)   2018-05-29 09:06:00
謝謝Schottky大大 問題解決了 看來我對MFC架構不夠熟
作者: james732 (好人超)   2018-05-31 00:49:00
想要熟MFC架構非常困難啊 XD
作者: asdfg1597860 (Jay)   2018-06-01 00:17:00
目前我也只有套套function而已 架構還真的不了解

Links booklink

Contact Us: admin [ a t ] ucptt.com