在MFC對話框開發中,Radio Button(單選按鈕)是常用控件。本文系統講解如何設置默認選中、獲取選中狀態、實現多組互斥、處理點擊事件等核心技巧。
在 OnInitDialog() 中設置,三種等效方法:
// 方法一:直接操作控件
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE); // 選中
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE); // 取消
int state = ((CButton*)GetDlgItem(IDC_RADIO1))->GetCheck(); // 1=選中, 0=未選
// 方法二:Control型變量(需先設置Group屬性)
m_ctrlRadio1.SetCheck(TRUE);
// 方法三:int型變量(DDX映射,需Group屬性)
// 構造函數中:m_nRadio1 = 0; // 0=第一個, 1=第二個...
// 獲取:UpdateData(TRUE); 判斷 m_nRadio1 值
單選按鈕必須分組才能實現組內互斥。設置方法:
分組規則:從勾選 Group 的按鈕開始,直到下一個勾選 Group 的按鈕(不含)為一組。Tab Order 決定順序(Ctrl+D 調整)。
假設四個按鈕 Tab Order 為 1,2,3,4:
每組對應一個 int 型變量(如 m_nRadio1, m_nRadio4),值 0,1,2... 對應組內按鈕順序。
用 ClassWizard 為每個按鈕添加 BN_CLICKED 消息:
void CMyDlg::OnRadio1() { m_nRadio1 = 0; }
void CMyDlg::OnRadio2() { m_nRadio1 = 1; }
void CMyDlg::OnRadio3() { m_nRadio1 = 2; }
void CMyDlg::OnRadio4() { m_nRadio4 = 0; }
void CMyDlg::OnRadio5() { m_nRadio4 = 1; }
每組第一個按鈕:Group, Tabstop, Auto
組內其餘按鈕:Tabstop, Auto
ClassWizard 生成構造函數初始化為 -1(全不選)。修改為 0,1,2... 即可設置默認選中:
//{{AFX_DATA_INIT(CMyDlg)
m_nRadio1 = 0; // 默認選中組內第一個
m_nRadio4 = 0;
//}}AFX_DATA_INIT
掌握 Group 屬性分組邏輯、Tab Order 排序、DDX 變量映射、消息響應四大核心,即可靈活驾驭 MFC 單選按鈕的各種複雜場景。