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

MFC Edit Control 取值與賦值完整實作教學

     編輯:關於C語言

前言

Edit Control 是 MFC 對話框最常用的輸入控制項。本文以 Visual Studio 2010 + MFC 專案為例,示範從建立專案、設計介面、綁定事件到程式碼實作「取值/賦值」的完整流程。

步驟 1:建立 MFC 專案

  1. VS 2010 → File → New → Project → MFC Application
  2. 專案名 NowaMagic_MFC,選 Dialog based,完成

新建MFC專案

步驟 2:設計對話框介面

  1. 資源視圖 → Dialog → IDD_NOWAMAGIC_MFC_DIALOG
  2. 從工具箱拖入 Edit Control (ID: IDC_EDIT1) 與 Button (ID: IDOK)

對話框設計

步驟 3:為按鈕添加點擊事件

  1. 選取 Button,屬性欄點 閃電圖示 (Events)
  2. 找 BN_CLICKED,下拉選 <Add> OnBnClickedOk
  3. 自動生成 void CNowaMagic_MFCDlg::OnBnClickedOk()

步驟 4:實作取值與賦值程式碼

void CNowaMagic_MFCDlg::OnBnClickedOk()
{
    // TODO: 在此添加控件通知處理程序代碼
    // CDialogEx::OnOK();  // 若需關閉對話框取消註解

    // 1. 取得 Edit Control 指標
    CEdit* pBoxOne = (CEdit*)GetDlgItem(IDC_EDIT1);
    if (!pBoxOne) return;  // 防禦性檢查

    // 2. 賦值範例 (註解掉,演示取值)
    // pBoxOne->SetWindowText(_T("FOO "));

    // 3. 取值並顯示
    CString str;
    pBoxOne->GetWindowText(str);  // 將編輯框內容讀入 CString
    MessageBox(str, _T("程式執行結果"), MB_OK);

    str.ReleaseBuffer();  // 良好習慣,釋放緩衝區鎖定
}

關鍵 API 對照表

操作MFC 方法Win32 API 對應說明
取值GetWindowText(CString&)GetWindowText(hwnd, buf, len)複製內容到字串物件
賦值SetWindowText(LPCTSTR)SetWindowText(hwnd, text)設定新內容
取長度GetWindowTextLength()GetWindowTextLength(hwnd)不含結尾 null
限制長度LimitText(int)EM_LIMITTEXT最大字元數
選取範圍SetSel(start, end)EM_SETSEL高亮/游標位置
密碼模式SetPasswordChar(TCHAR)EM_SETPASSWORDCHAR顯示 * 或 ●

進階技巧:DDX (Dialog Data Exchange)

MFC 提供更優雅的資料綁定機制,避免手動 GetDlgItem:

/*** 標頭檔 ***/
class CMyDialog : public CDialogEx {
    CString m_strEdit;  // 成員變數
    // ...
    virtual void DoDataExchange(CDataExchange* pDX);
};

/*** 實作檔 ***/
void CMyDialog::DoDataExchange(CDataExchange* pDX) {
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, m_strEdit);  // 雙向綁定
}

/*** 使用 ***/
void CMyDialog::OnBnClickedOk() {
    UpdateData(TRUE);   // 控制項 → 變數 (取值)
    MessageBox(m_strEdit, _T("結果"), MB_OK);
    m_strEdit = _T("NEW VALUE");
    UpdateData(FALSE);  // 變數 → 控制項 (賦值)
}

優點:型別安全、自動處理 CString/int/float 轉換、支援驗證 DDV_MaxChars 等。

執行結果展示

執行結果:MessageBox 顯示輸入內容

常見問題排查

  • GetDlgItem 回傳 NULL:ID 拼錯、控制項未建立、對話框尚未 OnInitDialog 完成
  • GetWindowText 讀到空字串:未輸入、或控制項為 ES_PASSWORD 模式需特殊處理
  • 中文亂碼:專案設定 Unicode 字元集,字串用 _T()/TEXT() 宏
  • ReleaseBuffer 忘記呼叫:若手動 GetBuffer() 必須配對,GetWindowText(CString&) 內部已處理

總結

MFC Edit Control 核心操作:GetDlgItem 取得 CEdit* → GetWindowText/SetWindowText 取值/賦值。實務上強烈建議使用 DDX 機制,減少樣板碼、提高型別安全與維護性。

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