上一节讲了按钮控件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
}

  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、到此程序编写完成。运行程序弹出结果对话框,选择网站后界面如下图:

  按钮控件的内容就这些了。

MFC编程入门之二十三(常用控件:按钮控件的编程实例)的更多相关文章

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

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

  2. MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

    本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的侠义的 ...

  3. VS2010/MFC编程入门之二十二(常用控件:按钮控件Button、Radio Button和Check Box)

    言归正传,鸡啄米上一节中讲了编辑框的用法,本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box ...

  4. VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 http://www.jizhuomi.com/software/141.html   上一讲中讲了VS20 ...

  5. Bootstrap入门(二十三)JS插件1:模态框

    Bootstrap入门(二十三)JS插件1:模态框 1.静态实例 2.动态实例 3.模态框的尺寸和效果 4.包含表单的模态框 模态框经过了优化,更加灵活,以弹出对话框的形式出现,具有最小和最实用的功能 ...

  6. VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

    前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用.      列表视图控件简介 列表视图控件List Control同样比较常见, ...

  7. MFC编程入门之二十八(常用控件:列表视图控件List Control上)

    前面一节中,讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用. 列表视图控件简介 列表视图控件List Control同样比较常见,它能够把任何字符 ...

  8. MFC编程入门之二十四(常用控件:列表框控件ListBox)

    前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法.本文要讲的是列表框控件(ListBox)及其使用实例. 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选 ...

  9. VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)

    前面两节讲了比较常用的按钮控件,并通过按钮控件实例说明了具体用法.本文要讲的是列表框控件(ListBox)及其使用实例. 列表框控件简介 列表框给出了一个选项清单,允许用户从中进行单项或多项选择,被选 ...

随机推荐

  1. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  2. iOS 开发:CoCoapods的使用和安装

    CocoaPods的使用和安装 一.什么是CocoaPods? 前言: 思考如何引入一个第三方框架. 例如: 百度地图SDK.友盟.ShareSDK. 信鸽推送等. 从github或某处下载第三方SD ...

  3. Linux 环境变量PS1设置

    新建用户不显示IP和机器名 CentOS下新增加一个用户,登录进去会发现shell脚本信息没有显示用户名和主机名,反而显示的是user1@202.173.1.12 解决方案: 1.在新建用户的-目录下 ...

  4. jquery网页换肤+jquery的cookie+动态调用css样式文件,可以的

    比较具有参考性,代码全贴(当然,还需要一张图片需要的留个邮箱,看到就发) 贴在这儿吧,修改一下css的引用位置应该可以用 <%@ page language="java" c ...

  5. Application Pool

  6. CSS3 3D轮播主要可以分成这样的三类

    中秋节假期这么快就没了,这几天还一直下雨,索性在家看看书.这次看的是Tom Lane的<A Tour of PostgreSQL Internals>.这篇小随笔就算做学习笔记了.园子里面 ...

  7. YbSoftwareFactory 代码生成插件【十六】:Web 下灵活、强大的审批流程实现(含流程控制组件、流程设计器和表单设计器)

    程序=数据结构+算法,而企业级的软件=数据+流程,流程往往千差万别,客户自身有时都搞不清楚,随时变化的情况更是家常便饭,抛开功能等不谈,需求变化很大程度上就是流程的变化,流程的变化会给开发工作造成很大 ...

  8. Android 颜色渲染PorterDuff及Xfermode详解

    在讲具体的使用之前补充一点知识,这就是 ProterDuff的由来: 相信大多数人看到这个ProterDuff单词很奇怪了吧,这肿么个意思呢,然后就用有道啊,金山啊开始翻译,但是翻译软件给出的结果肯定 ...

  9. Azure Management API 之 利用 Windows Azure Management Libraries 来控制Azure platform

    在此之前,我曾经发过一篇文章讲叙了如何利用Azure power shell team 提供的class library. 而就在这篇文章发布之后不久,我又发现微软发布了一个preview 版本的Wi ...

  10. LoadRunner培训初级教程

    一 LoadRunner简介 1.1 Loadrunner介绍 LoadRunner 是 HP Mercury Interactive 用来测试应用程序性能的工具  LoadRunner 通过模拟一个 ...