DoModal 執行流程
INT_PTR nRes = tipDlg.DoModal(); // 1. 模態彈出,阻塞當前函數
// 2. 使用者點擊「確定/取消/關閉」→ 對話框銷毀
// 3. DoModal 返回對應的 ID:IDOK / IDCANCEL / 自訂 ID
if (IDCANCEL == nRes) return; // 4. 根據返回值決定後續邏輯
UpdateData(TRUE); // 5. 繼續執行:取得控件資料、計算、刷新 UI
關鍵點
- 返回位置:緊接著呼叫
DoModal() 的下一行程式碼(同步阻塞)。
- 返回值來源:對話框類別裡呼叫
EndDialog(nResult) 時傳入的參數。預設「確定」→ IDOK,「取消/關閉」→ IDCANCEL。
- 對話框生命週期:
DoModal 返回時,對話框物件已銷毀,但堆疊上的區域變數 tipDlg 仍存在(可繼續存取其 public 成員)。
實戰模式
MyDialog dlg;
if (dlg.DoModal() == IDOK) {
// 使用者按確定:讀取 dlg.m_strInput 等公有資料
ProcessData(dlg.m_strInput);
} else {
// 使用者取消:不做任何事或提示
}