專為 MFC 初學者設計的「按鈕控制項第一課」。透過一個簡單的「加法/減法計算器」對話框程式,完整走過:**專案建立、資源編輯、控制項屬性設定、類別精靈變數綁定 (DDX)、訊息映射 (BN_CLICKED)、UpdateData 雙向資料同步** 全流程,並解析 UpdateData(TRUE/FALSE) 的核心意義。
ButtonDemo。IDD_BUTTONDEMO_DLG,保留 OK 按鈕,刪除 Cancel。ID_BUTTON_ADD (Caption: "Plus")、ID_BUTTON_SUBTRACT (Caption: "Minus")。IDC_EDIT_X, IDC_EDIT_Y, IDC_EDIT_ANSWER (最後一個勾選 Read-only/Disabled)。
對話框編輯器佈局
按 Ctrl+W 開啟類別精靈:
int 型別變數 m_nX, m_nY, m_nAnswer (Category: Value)。ID_BUTTON_ADD、ID_BUTTON_SUBTRACT,添加 BN_CLICKED 訊息,生成 OnButtonAdd、OnButtonSubtract。
變數綁定設定

訊息映射設定
void CButtonDemoDlg::OnButtonAdd()
{
UpdateData(TRUE); // 關鍵:將控制項輸入值 → 成員變數 (m_nX, m_nY)
m_nAnswer = m_nX + m_nY;
UpdateData(FALSE); // 關鍵:將成員變數值 → 控制項顯示 (m_nAnswer)
}
void CButtonDemoDlg::OnButtonSubtract()
{
UpdateData(TRUE);
m_nAnswer = m_nX - m_nY;
UpdateData(FALSE);
}
UpdateData 雙向綁定機制| 呼叫 | 方向 | 內部動作 (DoDataExchange) | 適用場景 |
|---|---|---|---|
UpdateData(TRUE) | 控制項 → 變數 | DDX_Text(pDX, IDC_EDIT_X, m_nX) 讀取編輯框文字,轉換為 int 賦值給 m_nX | 使用者輸入完畢,按下按鈕前,需取得最新值 |
UpdateData(FALSE) | 變數 → 控制項 | 將 m_nAnswer 整數轉字串,設定至 IDC_EDIT_ANSWER 顯示 | 計算完成後,更新結果顯示 |
記住口訣: TRUE = **T**ake data (拿資料);FALSE = **F**ill data (填資料)。
ClassWizard 預設僅列出常用訊息。若需處理 WM_ERASEBKGND、WM_NCHITTEST 等:

添加自訂 Windows 訊息處理器
這個微小的計算器程式,串起了 MFC 對話框開發的核心骨架:**資源 ↔ 變數 (DDX) ↔ 訊息處理 ↔ 資料同步 (UpdateData)**。掌握此流程,你就擁有了構建任意複雜對話框應用的基因密碼。