首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC 父子對話框數據傳遞:參數設置對話框關閉後主對話框讀取數據的最佳實踐

     編輯:程式設計綜合問答

場景

主對話框彈出模態參數設置對話框,用戶在編輯框輸入值點「確定」,主對話框需獲取該值更新成員變量 depth。

推薦模式:主對話框主動讀取

// 主對話框按鈕處理
void CMainDlg::OnBnClickedSetParam() {
    CParamDlg dlg;
    dlg.m_value = m_depth; // 初始化傳入當前值 (可選)
    if (dlg.DoModal() == IDOK) {
        m_depth = dlg.m_value; // 讀取用戶輸入
        UpdateData(FALSE);     // 刷新界面顯示
    }
}

// 參數對話框頭文件
class CParamDlg : public CDialogEx {
public:
    double m_value; // 編輯框綁定的成員變量 (Control/Value)
    // ...
};

優勢

  • 低耦合:參數對話框無需知道主對話框存在,只負責自身數據綁定。
  • 符合模態對話框語義:DoModal() 返回 IDOK 表示用戶確認,主對話框負責提取結果。
  • 避免指針/引用傳遞風險:無需傳遞主對話框指針給子對話框。

回車鍵確認

在參數對話框類中重寫 PreTranslateMessage:

BOOL CParamDlg::PreTranslateMessage(MSG* pMsg) {
    if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN) {
        OnOK(); // 觸發確定按鈕邏輯
        return TRUE;
    }
    return CDialogEx::PreTranslateMessage(pMsg);
}

總結

「子對話框保存數據,父對話框讀取數據」是 MFC 模態對話框數據交互的標準模式,清晰、安全、易維護。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved