MFC编程⼊门之⼆⼗三(常⽤控件:按钮控件的编程实例)
  上⼀节讲了按钮控件Button、Radio Button和Check Box的基本⽤法,本节继续讲按钮控件的内容,通过⼀个实例让⼤家更清楚按钮控件在实际的软件开发中如何使⽤。
  因为Button控件在前⾯的例⼦中涉及到了,⽐较简单,本⽂就不作深⼊分析了,⽽是重点讲解单选按钮Radio Button、复选框Check Box的使⽤。
  按钮控件实例的功能
  ⾸先介绍此实例实现的功能。此实例⽤来根据⽹站类型选择⽹站,并将选择的⽹站的名称显⽰到编辑框中。⽹站类型有“门户”、“论坛”和“博客”三种,为单选按钮。⽹站有六个:博客园、新浪、天涯论坛、韩寒博客、⽹易和凤凰⽹论坛,均为复选框。
  当选中某种⽹站类型即点了某个单选按钮时,其对应的⽹站的复选框就激活,其他则禁⽤,不允许选择,且为⾮选中状态。例如,如果选中了“门户”单选按钮,则“新浪”、“⽹易”复选框激活,允许⽤户选择,⽽其他复选框则禁⽤。
  按钮控件实例的实现
  下⾯为⼤家详细阐述此实例的编写步骤。
  1、创建⼀个基于对话框的MFC⼯程,名称设为“MFCButtonDemo”。
  2、在⾃动⽣成的主对话框IDD_MFCBUTTONDEMO_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.
  5、在两个Group Box下⾯,添加⼀个静态⽂本框和⼀个编辑框。静态⽂本框Caption设为“选择的⽹站:”。编辑框的ID设为
IDC_WEBSITE_SEL_EDIT,属性Read Only改为True,使此编辑框为只读状态,不允许⽤户编辑。
  6、将“取消”按钮的Caption修改为“退出”。到此,对话框模板就修改完成了,如下图:
  7、为“门户”、“论坛”和“博客”三个单选按钮分别添加点击消息的消息处理函数CMFCButtonDemoDlg::OnBnClickedPortalRadio()、CMFCButtonDemoDlg::OnBnClickedForumRadio()和CMFCButtonDemoDlg::OnBnClickedBlogRadio()。
  在某个单选按钮被点击之后,我们可以先将六个⽹站复选框都禁⽤且置为⾮选中状态,⽽后将选择的⽹站类型对应的⽹站复选框激活。为了代码复⽤,我们将置所有复选框为禁⽤状态且⾮选中状态的操作写在⼀个函数⾥,此函数为
CMFCButtonDemoDlg::InitAllCheckBoxStatus(),然后就可以在三个单选按钮的消息处理函数中调⽤InitAllCheckBoxStatus(),实现复选框状态的初始化。
  三个消息处理函数及InitAllCheckBoxStatus()函数的实现如下:
C++代码:
void CMFCButtonDemoDlg::OnBnClickedPortalRadio()
{
// TODO: 在此添加控件通知处理程序代码
// 如果选择了“门户”单选按钮,则激活复选框
// “新浪”和“⽹易”,其他复选框禁⽤并⾮选中
InitAllCheckBoxStatus();
m_check2.EnableWindow(TRUE);
m_check5.EnableWindow(TRUE);
}
void CMFCButtonDemoDlg::OnBnClickedForumRadio()
{
// TODO: 在此添加控件通知处理程序代码
// 如果选择了“论坛”单选按钮,则激活复选框
// “天涯论坛”和“凤凰⽹论坛”,其他复选框禁⽤并⾮选中
InitAllCheckBoxStatus();
m_check3.EnableWindow(TRUE);
m_check6.EnableWindow(TRUE);
}
void CMFCButtonDemoDlg::OnBnClickedBlogRadio()
{
// TODO: 在此添加控件通知处理程序代码
// 如果选择了“博客”单选按钮,则激活复选框
// “博客园”和“韩寒博客”,其他复选框禁⽤并⾮选中
InitAllCheckBoxStatus();
m_check1.EnableWindow(TRUE);
m_check4.EnableWindow(TRUE);
}
void CMFCButtonDemoDlg::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、程序运⾏后,我们希望⽹站类型默认选择为“门户”,则修改对话框初始化函数CMFCButtonDemoDlg::OnInitDialog()为:C++代码:
BOOL CMFCButtonDemoDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
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);
}
}
// 设置此对话框的图标。当应⽤程序主窗⼝不是对话框时,框架将⾃动
//  执⾏此操作
SetIcon(m_hIcon, TRUE);  // 设置⼤图标
SetIcon(m_hIcon, FALSE);  // 设置⼩图标
/
/ TODO: 在此添加额外的初始化代码
// 默认选中“门户”单选按钮
CheckDlgButton(IDC_PORTAL_RADIO, 1);
OnBnClickedPortalRadio();
return TRUE;  // 除⾮将焦点设置到控件,否则返回 TRUE
htmlradio设置默认的按钮
}
  9、点击“确定”后,将选择的⽹站名字显⽰到编辑框中,那么需要重载“确定”按钮(原来的OK按钮)的消息处理函数CMFCButtonDemoDlg::OnOk()如下:
C++代码:
void CMFCButtonDemoDlg::OnOK()
{
// TODO: 在此添加专⽤代码和/或调⽤基类
CString strWebsiteSel; // 选择的⽹站
// 若选中“博客园”则将其加⼊结果字符串
if (1 == m_check1.GetCheck())
{
strWebsiteSel += _T("博客园 ");
}
// 若选中“新浪”则将其加⼊结果字符串
if (1 == m_check2.GetCheck())
{
strWebsiteSel += _T("新浪 ");
}
/
/ 若选中“天涯论坛”则将其加⼊结果字符串
if (1 == m_check3.GetCheck())
{
strWebsiteSel += _T("天涯论坛 ");
}
// 若选中“韩寒博客”则将其加⼊结果字符串
if (1 == m_check4.GetCheck())
{
strWebsiteSel += _T("韩寒博客 ");
}
// 若选中“⽹易”则将其加⼊结果字符串
if (1 == m_check5.GetCheck())
{
strWebsiteSel += _T("⽹易 ");
}
// 若选中“凤凰⽹论坛”则将其加⼊结果字符串
if (1 == m_check6.GetCheck())
{
strWebsiteSel += _T("凤凰⽹论坛");
}
// 将结果字符串显⽰于“选择的⽹站”后的编辑框中
SetDlgItemText(IDC_WEBSITE_SEL_EDIT, strWebsiteSel);
}
  10、到此程序编写完成。运⾏程序弹出结果对话框,选择⽹站后界⾯如下图:  按钮控件的内容就这些了。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。