上一节VS2013/MFC编程入门教程中讲了按钮控件Button、Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件开发中如何使用。
因为Button控件在前面的例子中涉及到了,比较简单,本文就不作深入分析了,而是重点讲解单选按钮Radio Button、复选框Check Box的使用。
按钮控件实例的功能
首先介绍此实例实现的功能。此实例用来根据不同学院来选择不同的专业,并将选择的专业的名称显示到编辑框中。学院名称有“信息学院”、“土木学院”和“外语学院”三种,为单选按钮。网站有七个:通信、计算机、软件、英语、日语、隧道和桥梁,均为复选框。
当选中某种学院即点了某个单选按钮时,其对应的专业的复选框就激活。例如,如果选中了“土木学院”单选按钮,则“隧道”、“桥梁”复选框激活,允许用户选择,而其他复选框则禁用。
按钮控件实例的实现
下面为大家详细阐述此实例的编写步骤。
1. 创建一个基于对话框的MFC工程,名称设为“Example22”。
2. 在自动生成的主对话框IDD_EXAMPLE22_DIALOG的模板中,删除“TODO: 在此处放置对话框控件.”静态文本框,添加三个Radio Button,属性Caption分别改为“信息学院”、“外语学院”、“土木学院”,ID分别设为IDC_COM_RADIO、IDC_LAN_RADIO和IDC_BUI_RADIO。
3. 在对话框中加入七个Check Box,Caption分别设为“通信”、“计算机”、“软件”、“英语”、“日语”、“隧道”和“桥梁”,ID分别设为IDC_CHECK1、IDC_CHECK2、IDC_CHECK3、IDC_CHECK4、IDC_CHECK5、IDC_CHECK6和IDC_CHECK7。然后为每个复选框添加CButton类型的变量m_com、m_computer、m_software、m_english、m_janpan、m_sudiao和m_bridge。
4. 在对话框中添加一个静态文本框和一个编辑框。静态文本框的Caption设为“选择的专业:”。编辑框的ID设为IDC_EDIT1,属性Read Only改为True,使此编辑框为只读状态,不允许用户编辑。
5. 将“取消”按钮的Caption修改为“退出”。到此,对话框模板就修改好了,如下图:
6. 为“信息学院”、“外语学院”和“土木学院”三个单选按钮分别添加点击消息的消息处理函数CExample22Dlg::OnBnClickedRadio1()、CExample22Dlg::OnBnClickedRadio2()和CExample22Dlg::OnBnClickedRadio3()
在某个单选按钮被点击之后,我们可以先将六个网站复选框都禁用且置为非选中状态,而后将选择的网站类型对应的网站复选框激活。为了代码复用,我们将置所有复选框为非选中状态的操作写到一个函数里,此函数为CExample22Dlg::AllCheck(),然后就可以在三个单选按钮的消息处理函数中调用AllCheck(),实现复选框状态的初始化。
三个消息处理函数及AllCheck()函数的实现如下:
void CExample22Dlg::AllCheck()
{
m_suidao.SetCheck(0);
m_bridge.SetCheck(0);
m_english.SetCheck(0);
m_janpan.SetCheck(0);
m_com.SetCheck(0);
m_computer.SetCheck(0);
m_software.SetCheck(0);
}
void CExample22Dlg::OnBnClickedRadio1()
{
// TODO: 在此添加控件通知处理程序代码
AllCheck();
m_suidao.EnableWindow(FALSE);
m_bridge.EnableWindow(FALSE);
m_english.EnableWindow(FALSE);
m_janpan.EnableWindow(FALSE);
m_com.SetCheck(1);
m_computer.SetCheck(1);
m_software.SetCheck(1);
}
void CExample22Dlg::OnBnClickedRadio2()
{
// TODO: 在此添加控件通知处理程序代码
AllCheck();
m_com.EnableWindow(FALSE);
m_computer.EnableWindow(FALSE);
m_english.EnableWindow(FALSE);
m_janpan.EnableWindow(FALSE);
m_software.EnableWindow(FALSE);
m_suidao.SetCheck(1);
m_bridge.SetCheck(1);
}
void CExample22Dlg::OnBnClickedRadio3()
{
// TODO: 在此添加控件通知处理程序代码
AllCheck();
m_suidao.EnableWindow(FALSE);
m_bridge.EnableWindow(FALSE);
m_com.EnableWindow(FALSE);
m_computer.EnableWindow(FALSE);
m_software.EnableWindow(FALSE);
m_english.SetCheck(1);
m_janpan.SetCheck(1);
}
7. 程序运行后,当我们点击“确定”按钮,即在编辑框中显示选中的专业名称。确定按钮的函数实现代码如下:
void CExample22Dlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CString string=_T(" ");
if (m_suidao.GetCheck() == 1)
string += _T(" 隧道");
if (m_english.GetCheck() == 1)
string += _T(" 英语");
if (m_janpan.GetCheck() == 1)
string += _T(" 日语");
if (m_com.GetCheck() == 1)
string += _T(" 通信");
if (m_computer.GetCheck() == 1)
string += _T(" 计算机");
if (m_bridge.GetCheck() == 1)
string += _T(" 桥梁");
if (m_software.GetCheck() == 1)
string += _T(" 软件");
SetDlgItemText(IDC_EDIT1,string);
}
8程序运行结果如下图所示: