1. 基础概念
Radio按钮特点:
-
同一组中只能选择一个
-
需要分组管理
-
通常配合Group Box使用
2. 添加Radio按钮到对话框
方法1:通过资源编辑器添加
-
打开对话框资源编辑器
-
从工具箱拖拽Radio Button控件
-
设置属性:
-
ID : 如
IDC_RADIO_MALE -
Caption: 如"男"
-
Group : 第一个Radio设置为
True,同组其他设置为False
-
方法2:手动创建Radio按钮
cpp
// 在对话框类头文件中
class CMyDialog : public CDialogEx
{
// ...
private:
CButton m_radioMale;
CButton m_radioFemale;
CButton m_radioOther;
// ...
};
3. 基本使用示例
示例1:性别选择(3选1)
资源ID设置:
-
IDC_RADIO_MALE (Group=True)
-
IDC_RADIO_FEMALE (Group=False)
-
IDC_RADIO_OTHER (Group=False)
对话框类代码:
cpp
// MyDialog.h
#pragma once
#include "afxwin.h"
class CMyDialog : public CDialogEx
{
DECLARE_DYNAMIC(CMyDialog)
public:
CMyDialog(CWnd* pParent = nullptr);
virtual ~CMyDialog();
enum { IDD = IDD_MYDIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
// Radio按钮变量
int m_nGender; // 0:男, 1:女, 2:其他
// Radio按钮控件
CButton m_radioMale;
CButton m_radioFemale;
CButton m_radioOther;
DECLARE_MESSAGE_MAP()
public:
virtual BOOL OnInitDialog();
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedRadioMale();
afx_msg void OnBnClickedRadioFemale();
afx_msg void OnBnClickedRadioOther();
};
cpp
// MyDialog.cpp
#include "stdafx.h"
#include "MyDialog.h"
CMyDialog::CMyDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_MYDIALOG, pParent)
, m_nGender(0) // 默认选择"男"
{
}
CMyDialog::~CMyDialog()
{
}
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_RADIO_MALE, m_radioMale);
DDX_Control(pDX, IDC_RADIO_FEMALE, m_radioFemale);
DDX_Control(pDX, IDC_RADIO_OTHER, m_radioOther);
DDX_Radio(pDX, IDC_RADIO_MALE, m_nGender); // 注意:绑定到第一个Radio的ID
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialogEx)
ON_BN_CLICKED(IDOK, &CMyDialog::OnBnClickedOk)
ON_BN_CLICKED(IDC_RADIO_MALE, &CMyDialog::OnBnClickedRadioMale)
ON_BN_CLICKed(IDC_RADIO_FEMALE, &CMyDialog::OnBnClickedRadioFemale)
ON_BN_CLICKED(IDC_RADIO_OTHER, &CMyDialog::OnBnClickedRadioOther)
END_MESSAGE_MAP()
BOOL CMyDialog::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 设置默认选择
m_radioMale.SetCheck(BST_CHECKED);
m_radioFemale.SetCheck(BST_UNCHECKED);
m_radioOther.SetCheck(BST_UNCHECKED);
return TRUE;
}
void CMyDialog::OnBnClickedOk()
{
// 更新变量值
UpdateData(TRUE);
CString strGender;
switch (m_nGender) {
case 0: strGender = _T("男"); break;
case 1: strGender = _T("女"); break;
case 2: strGender = _T("其他"); break;
}
CString strMsg;
strMsg.Format(_T("您选择的性别是: %s"), strGender);
MessageBox(strMsg, _T("提示"), MB_OK);
CDialogEx::OnOK();
}
// Radio按钮点击事件
void CMyDialog::OnBnClickedRadioMale()
{
m_nGender = 0;
UpdateData(FALSE); // 更新控件显示
}
void CMyDialog::OnBnClickedRadioFemale()
{
m_nGender = 1;
UpdateData(FALSE);
}
void CMyDialog::OnBnClickedRadioOther()
{
m_nGender = 2;
UpdateData(FALSE);
}