首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

MFC 按鈕控制項入門實戰:對話框模式下的訊息機制與 UpdateData 雙向綁定

     編輯:VC 教學

專為 MFC 初學者設計的「按鈕控制項第一課」。透過一個簡單的「加法/減法計算器」對話框程式,完整走過:**專案建立、資源編輯、控制項屬性設定、類別精靈變數綁定 (DDX)、訊息映射 (BN_CLICKED)、UpdateData 雙向資料同步** 全流程,並解析 UpdateData(TRUE/FALSE) 的核心意義。

專案建立與介面佈局

  1. AppWizard 建立 **Dialog-based** 專案,命名 ButtonDemo。
  2. 資源視圖開啟 IDD_BUTTONDEMO_DLG,保留 OK 按鈕,刪除 Cancel。
  3. 拖放兩個 Button:設 ID 為 ID_BUTTON_ADD (Caption: "Plus")、ID_BUTTON_SUBTRACT (Caption: "Minus")。
  4. 拖放三個 Edit Control:ID 分別為 IDC_EDIT_X, IDC_EDIT_Y, IDC_EDIT_ANSWER (最後一個勾選 Read-only/Disabled)。
  5. 中間加一 Static Control Caption "=" 做視覺分隔。

對話框編輯器佈局

類別精靈綁定變數與訊息 (核心步驟)

按 Ctrl+W 開啟類別精靈:

  1. Member Variables 頁:為三個 Edit Control 添加 int 型別變數 m_nX, m_nY, m_nAnswer (Category: Value)。
  2. Message Maps 頁:選擇 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 未列出的 Windows 訊息

ClassWizard 預設僅列出常用訊息。若需處理 WM_ERASEBKGND、WM_NCHITTEST 等:

  1. ClassView → 對話框類別右鍵 → Add Windows Message Handler...
  2. 列表中勾選所需訊息 (可多選) → Add and Edit。

添加自訂 Windows 訊息處理器

總結

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

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