本文彙整了 MFC 對話框開發中最高頻的 API 用法、資料交換機制、訊息處理技巧,適合作為速查手冊。
GetDlgItem(IDC_STATIC)->GetWindowText(str) 取得文字(靜態控件需勾選 Notify 屬性)。SetDlgItemText(IDC_STATIC, _T("新文字")) 設定文字。GetDlgItemInt(IDC_EDIT) 直接取得整數值。UpdateData(TRUE):控件 → 變數(使用者輸入寫入成員變數)。UpdateData(FALSE):變數 → 控件(成員變數更新顯示)。CEdit m_edit)可直接呼叫 GetWindowText/SetWindowText,無需 GetDlgItem。SendDlgItemMessage(IDC_EDIT, WM_GETTEXT, len, (LPARAM)buf) 直接發送訊息取得文字。SendDlgItemMessage(IDC_EDIT, WM_SETTEXT, 0, (LPARAM)buf) 設定文字。EM_GETSEL/EM_SETSEL 取得/設定編輯框選取範圍(0, -1 選取全部)。GetDlgItem(IDC_NEXT)->SetFocus() 移動焦點。SetWindowPos/DeferWindowPos 重排 Z 序。IDOK 仍會觸發 OnOK(預設按鈕行為)。CPropertyPage::OnSetActive() 頁面啟動時觸發。((CPropertySheet*)GetParent())->SetWizardButtons(...)。AddString 新增項目。SetCurSel(index) 設定預設選取項。若需攔截控件訊息,可為控件建立對應類別(ClassWizard 添加控件變數時選擇「Control」類型),或在 OnInitDialog 中使用 SetWindowLong(GWL_WNDPROC, ...) 替換視窗程序。注意保存原 WNDPROC 以便呼叫 CallWindowProc。
GetNextDlgTabItem(GetFocus())->SetFocus() 移至下一個 Tab Stop 控件。GetNextWindow()、GetWindow(GW_HWNDNEXT) 遍歷視窗鏈。