MFC基于对话框Radio按钮的使用方法

1. 基础概念

Radio按钮特点:

  • 同一组中只能选择一个

  • 需要分组管理

  • 通常配合Group Box使用

2. 添加Radio按钮到对话框

方法1:通过资源编辑器添加

  1. 打开对话框资源编辑器

  2. 从工具箱拖拽Radio Button控件

  3. 设置属性:

    • 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);
}
相关推荐
wuminyu42 分钟前
JVM利用io_uring优化堆外内存性能原理剖析
java·linux·c语言·jvm·c++
gumichef1 小时前
第二章:C/C++内存管理
c++·内存管理
小龙报4 小时前
【优选算法】1.搜索插入位置 2.x的平方根
java·c语言·数据结构·c++·python·算法·蓝桥杯
A_humble_scholar4 小时前
Linux(二) C++ TCP/UDP网络编程
linux·网络·c++
SNAKEpc121386 小时前
OpenGL(十五)- 着色器语言GLSL
c语言·c++·线性代数·算法·矩阵·图形渲染·着色器
欧特克_Glodon6 小时前
OpenCV计算机视觉开发入门与实践<六>:OpenCV架构模块简介
c++·人工智能·opencv·计算机视觉
Rabitebla6 小时前
C++11 新特性详解(一):列表初始化、initializer_list 与右值引用
java·开发语言·数据结构·c++·算法·leetcode·list
MC皮蛋侠客7 小时前
TDengine C++ 系列(11):性能模型与调优——从测量到优化
c++·php·tdengine
兔兔兔兔18 小时前
记录C++ 3
开发语言·c++
代码地平线8 小时前
C++类与对象(中):默认成员函数与日期类实战
c++·笔记·算法