上一节VS2010/MFC编程入门教程中鸡啄米讲了按钮控件Button、Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件开发中如何使用。
上一节VS2010/MFC编程入门教程中讲了按钮控件Button、Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件开发中如何使用。

按钮控件实例的功能
当选中某种 站类型即点了某个单选按钮时,其对应的 站的复选框就激活,其他则禁用,不允许选择,且为非选中状态。例如,如果选中了“门户”单选按钮,则“新浪”、“ 易”复选框激活,允许用户选择,而其他复选框则禁用。
按钮控件实例的实现
下面为大家详细阐述此实例的编写步骤。
1. 创建一个基于对话框的MFC工程,名称设为“Example23”。
2. 在自动生成的主对话框IDD_EXAMPLE23_DIALOG的模板中,删除“TODO: Place dialog controls here.”静态文本框,添加两个Group Box,属性Caption分别改为“ 站类型”、“ 站”。
3. 在Group Box“ 站类型”中加入三个Radio Button,Caption分别设为“门户”、“论坛”和“博客”,ID分别设为IDC_PORTAL_RADIO、IDC_FORUM_RADIO和IDC_BLOG_RADIO。
4. 在Group Box“ 站”中加入六个Check Box,Caption分别设为“新浪”、“天涯论坛”、“ 易”和“凤凰 论坛”,ID分别设为IDC_CHECK1、IDC_CHECK2、IDC_CHECK3、IDC_CHECK4、IDC_CHECK5和IDC_CHECK6。然后为每个复选框添加CButton类型的变量m_check1、m_check2、m_check3、m_check4、m_check5和m_check6。
6. 将“OK”按钮的Caption修改为“确定”,“Cancel”按钮的Caption修改为“退出”。到此,对话框模板就修改好了,如下图:

7. 为“门户”、“论坛”和“博客”三个单选按钮分别添加点击消息的消息处理函数CExample23Dlg::OnBnClickedPortalRadio()、CExample23Dlg::OnBnClickedForumRadio()和CExample23Dlg::OnBnClickedBlogRadio()。
在某个单选按钮被点击之后,我们可以先将六个 站复选框都禁用且置为非选中状态,而后将选择的 站类型对应的 站复选框激活。为了代码复用,我们将置所有复选框为禁用且非选中状态的操作写到一个函数里,此函数为CExample23Dlg::InitAllCheckBoxStatus(),然后就可以在三个单选按钮的消息处理函数中调用InitAllCheckBoxStatus(),实现复选框状态的初始化。
三个消息处理函数及InitAllCheckBoxStatus()函数的实现如下:
C++代码
void CExample23Dlg::OnBnClickedPortalRadio(){// TODO: Add your control notification handler code here// 如果选择了“门户”单选按钮,则激活复选框“新浪”和“ 易”,其他复选框禁用并非选中InitAllCheckBoxStatus();m_check2.EnableWindow(TRUE);m_check5.EnableWindow(TRUE);}void CExample23Dlg::OnBnClickedForumRadio(){// TODO: Add your control notification handler code here// 如果选择了“论坛”单选按钮,则激活复选框“天涯论坛”和“凤凰 论坛”,其他复选框禁用并非选中InitAllCheckBoxStatus();m_check3.EnableWindow(TRUE);m_check6.EnableWindow(TRUE);}void CExample23Dlg::OnBnClickedBlogRadio(){// TODO: Add your control notification handler code here// 如果选择了“博客”单选按钮,则激活复选框“鸡啄米”和“韩寒博客”,其他复选框禁用并非选中InitAllCheckBoxStatus();m_check1.EnableWindow(TRUE);m_check4.EnableWindow(TRUE);}// 初始化所有复选框的状态,即全部禁用,全部非选中void CExample23Dlg::InitAllCheckBoxStatus(){// 全部禁用m_check1.EnableWindow(FALSE);m_check2.EnableWindow(FALSE);m_check3.EnableWindow(FALSE);m_check4.EnableWindow(FALSE);m_check5.EnableWindow(FALSE);m_check6.EnableWindow(FALSE);// 全部非选中m_check1.SetCheck(0);m_check2.SetCheck(0);m_check3.SetCheck(0);m_check4.SetCheck(0);m_check5.SetCheck(0);m_check6.SetCheck(0);}
8. 程序运行后,我们希望 站类型默认选择为“门户”,则修改对话框初始化函数CExample23Dlg::OnInitDialog()为:
C++代码
BOOL CExample23Dlg::OnInitDialog(){CDialogEx::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){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);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization here// 默认选中“门户”单选按钮CheckDlgButton(IDC_PORTAL_RADIO, 1);OnBnClickedPortalRadio();return TRUE; // return TRUE unless you set the focus to a control}
C++代码
10. 到此程序编写完成。运行程序弹出结果对话框,选择 站后界面如下图:

按钮控件的内容就这些了。掌握了按钮控件的基本用法,又动手编写了这个实例后,相信大家对按钮控件已经很熟悉了。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!