Re: [問題]MFC 類似PROGRESSBAR的功能

作者: asdfg1597860 (Jay)   2018-05-29 16:29:57
※ 引述《asdfg1597860 (Jay)》之銘言:
: 開發平台(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
: {
▓ MSG msg;
: pModeless->ShowWindow(SW_SHOW);
:
▓ while(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
▓ {
▓ TranslateMessage(&msg);
▓ DispatchMessage(&msg);
▓ }
計算...
: ...
: }
: if(pModeless != NULL)
: pModeless->OnCancel();
: }
: 補充說明(Supplement):
: 請各位高手給小弟一點意見
加上有標註方框的程式後
就可以正確顯示Dialog了
PeekMessage 從Message Queue中抓訊息
因為沒有指定窗口 所以抓當前應用程式的訊息
參數wMsgFilterMin及wMsgFilterMax都為0
所以返回所有可得到的訊息
後面參數設定PM_REMOVE是因為WM_PAINT不會被刪除
所以會讓DIALOG確實執行WM_PAINT
另外TranslateMessage及DispatchMessage
應該是抓鍵盤或滑鼠事件
不知道我這樣理解是否正確
再請各位高手指導
作者: Schottky (順風相送)   2018-05-30 02:16:00
https://bit.ly/2sgglFB MSDN 官網的說明要處理的 message 不只一個,那個 while 迴圈會把全部的message 全部處理到完才脫離
作者: asdfg1597860 (Jay)   2018-06-01 00:19:00
了解 謝謝高手

Links booklink

Contact Us: admin [ a t ] ucptt.com