Edit Control 是 MFC 對話框最常用的輸入控制項。本文以 Visual Studio 2010 + MFC 專案為例,示範從建立專案、設計介面、綁定事件到程式碼實作「取值/賦值」的完整流程。
NowaMagic_MFC,選 Dialog based,完成
Dialog → IDD_NOWAMAGIC_MFC_DIALOGIDC_EDIT1) 與 Button (ID: IDOK)
BN_CLICKED,下拉選 <Add> OnBnClickedOkvoid CNowaMagic_MFCDlg::OnBnClickedOk()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(); // 良好習慣,釋放緩衝區鎖定
}
| 操作 | 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 | 顯示 * 或 ● |
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 等。

OnInitDialog 完成ES_PASSWORD 模式需特殊處理_T()/TEXT() 宏GetBuffer() 必須配對,GetWindowText(CString&) 內部已處理MFC Edit Control 核心操作:GetDlgItem 取得 CEdit* → GetWindowText/SetWindowText 取值/賦值。實務上強烈建議使用 DDX 機制,減少樣板碼、提高型別安全與維護性。