接下来是第二个MFC控件-单选按钮的使用方法, 同样分为基本使用和衍生的使用。
基本使用
首先我们准备六个单选按钮(一定要记住顺序)和一个按钮, 修改他们的ID做到见名知意(这里为了直观, 我就不修改了),接下来我们实现选中一个Radio按Button1就弹出一个提示消息框的功能。
双击Button1添加函数,代码实现如下:
void Cclass05Dlg::OnBnClickedButton1()
{
switch (GetCheckedRadioButton(IDC_RADIO1, //起始单选ID
IDC_RADIO6))//最后一个单选ID
{
case IDC_RADIO1:
MessageBox(L"1Down", L"提示", 0);
break;
case IDC_RADIO2:
MessageBox(L"2Down", L"提示", 0);
break;
case IDC_RADIO3:
MessageBox(L"3Down", L"提示", 0);
break;
case IDC_RADIO4:
MessageBox(L"4Down", L"提示", 0);
break;
case IDC_RADIO5:
MessageBox(L"5Down", L"提示", 0);
break;
case IDC_RADIO6:
MessageBox(L"6Down", L"提示", 0);
break;
}
// TODO: 在此添加控件通知处理程序代码
}
实现效果如下 :
分组使用
大家可以发现, 上面六个单选都是同一组,那怎么实现六个分组使用呢。这里注意单纯在GetCheckedRadioButton函数中修改参量是不行的, 正确的做法如下:
这里假设我们想将前三个分为 一组, 后三个分为一组
我们将第二租第一个Radio的族的值修改问True,就可以实现分组功能, 效果如下:
默认选择
大家肯定在填写问卷或者资料的时候, 看到单选 已经默认选择好, 那我们 应该怎么设置默认值呢, 这里提供两种方法:
不难想到,默认值就是窗口创建就已经设置好的的, 所以肯定是在窗口初始化函数中作文章。代码如下:
BOOL Cclass05Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
/*
方法一:
使用GetDlgItem函数获取窗口上的控件, 强转为CButton*类型再调用SetCheck函数设置为按下
*/
((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(1);
/*
方法二:
将控件实例化为对象, 再调用SetCheck函数设置为按下
*/
buton4.SetCheck(1);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
效果如下: