VS2019/MFC编程入门之经常使用控件:按钮控件的编程实例

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

由于Button控件在前面的例子中涉及到了,比较简单,本文就不做深刻分析了,而是重点讲解单选按钮Radio Button、复选框Check Box的使用。编程

Xtreme Toolkit Pro是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所须要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。app

点击下载最新版Xtreme Toolkit Proless

按钮控件实例的功能函数

首先介绍此实例实现的功能。此实例用来根据网站类型选择网站,并将选择的网站的名称显示到编辑框中。网站类型有“门户”、“论坛”和“博客”三种,为单选按钮。网站有:新浪、天涯论坛、网易和凤凰网论坛,均为复选框。网站

当选中某种网站类型即点了某个单选按钮时,其对应的网站的复选框就激活,其余则禁用,不容许选择,且为非选中状态。例如,若是选中了“门户”单选按钮,则“新浪”、“网易”复选框激活,容许用户选择,而其余复选框则禁用。this

按钮控件实例的实现url

下面为你们详细阐述此实例的编写步骤。.net

1. 建立一个基于对话框的MFC工程,名称设为“Example23”。code

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_CHECK一、IDC_CHECK二、IDC_CHECK三、IDC_CHECK四、IDC_CHECK5和IDC_CHECK6。而后为每一个复选框添加CButton类型的变量m_check一、m_check二、m_check三、m_check四、m_check5和m_check6。

5. 在两个Group Box下面,添加一个静态文本框和一个编辑框。静态文本框的Caption设为“选择的网站:”。编辑框的ID设为IDC_WEBSITE_SEL_EDIT,属性Read Only改成True,使此编辑框为只读状态,不容许用户编辑。

6. 将“OK”按钮的Caption修改成“肯定”,“Cancel”按钮的Caption修改成“退出”。到此,对话框模板就修改好了,以下图:

VS2010/MFC编程入门之二十三(经常使用控件:按钮控件的编程实例)

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 dialog
SetIcon(m_hIcon, TRUE);         // Set big icon
SetIcon(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
}

9. 点击“肯定”后,将选择的网站名字显示到编辑框中,那么须要修改“肯定”按钮(原来的OK按钮)的消息处理函数CExample23Dlg::OnBnClickedOk()以下:

C++代码

void CExample23Dlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
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);
// 为了不点“肯定”后对话框退出,将OnOk注掉
//CDialogEx::OnOK();
}

10. 到此程序编写完成。运行程序弹出结果对话框,选择网站后界面以下图:

VS2010/MFC编程入门之二十三(经常使用控件:按钮控件的编程实例)

按钮控件的内容就这些了。掌握了按钮控件的基本用法,又动手编写了这个实例后,相信你们对按钮控件已经很熟悉了。

转载自:http://www.jizhuomi.com/software/184.html

相关文章
相关标签/搜索