看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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 應該是抓鍵盤或滑鼠事件 不知道我這樣理解是否正確 再請各位高手指導 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.200.146 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1527582600.A.137.html
Schottky: https://bit.ly/2sgglFB MSDN 官網的說明 05/30 02:16
Schottky: 要處理的 message 不只一個,那個 while 迴圈會把全部的 05/30 02:16
Schottky: message 全部處理到完才脫離 05/30 02:16
asdfg1597860: 了解 謝謝高手 06/01 00:19