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

因为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。

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

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();
m_check2.SetCheck();
m_check3.SetCheck();
m_check4.SetCheck();
m_check5.SetCheck();
m_check6.SetCheck();
}
 

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, );
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 ( == m_check1.GetCheck())
{
strWebsiteSel += _T("鸡啄米 ");
}
// 若选中“新浪”则将其加入结果字符串
if ( == m_check2.GetCheck())
{
strWebsiteSel += _T("新浪 ");
}
// 若选中“天涯论坛”则将其加入结果字符串
if ( == m_check3.GetCheck())
{
strWebsiteSel += _T("天涯论坛 ");
}
// 若选中“韩寒博客”则将其加入结果字符串
if ( == m_check4.GetCheck())
{
strWebsiteSel += _T("韩寒博客 ");
}
// 若选中“网易”则将其加入结果字符串
if ( == m_check5.GetCheck())
{
strWebsiteSel += _T("网易 ");
}
// 若选中“凤凰网论坛”则将其加入结果字符串
if ( == m_check6.GetCheck())
{
strWebsiteSel += _T("凤凰网论坛 ");
} // 将结果字符串显示于“选择的网站”后的编辑框中
SetDlgItemText(IDC_WEBSITE_SEL_EDIT, strWebsiteSel); // 为了避免点“确定”后对话框退出,将OnOk注掉
//CDialogEx::OnOK();
}
 

10. 到此程序编写完成。运行程序弹出结果对话框,选择网站,然后点击确定,界面如下:

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

VS2010-MFC(常用控件:按钮控件的编程实例)的更多相关文章

  1. VS2010/MFC常用控件:图片控件Picture Control

    图片控件Picture Control 本节主要讲一种简单实用的控件,图片控件Picture Control.我们可以在界面某个位置放入图片控件,显示图片以美化界面. 图片控件简介 图片控件和前面讲到 ...

  2. VS2010/MFC对话框四:为控件添加消息处理函数

    为控件添加消息处理函数 创建对话框类和添加控件变量在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数. MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消 ...

  3. MFC基于对话框风格按钮控件添加图片的方法(大神止步)

    菜鸟还在研究这个东西,大神就不要看了.一直都在觉得用VC或VS建立的对话框总是全灰色感觉太单调了,如果可以在上面添加一些漂亮的图片就好了,今天终于实现了.其实挺简单的,下面就分几个步骤讲一下: 第一步 ...

  4. VS2010 MFC中 Date Time Picker控件的使用

    1. 在工具箱中找到Date Time Picker控件,然后拖放到对话框上. 2. 在其属性中按自己的需求做一些设置. Format 属性:Long Date (长日期):****年**月**日 S ...

  5. <a>实现按钮的javascript+jquery编程实例

    涉及知识点:怎样实现让注册的function获取当前<a>,以便通过它进行其他操作 风格一: 1.html端: <td class="text-center"&g ...

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

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

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

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

  8. VC按钮控件实现指示灯效果

    VC为按钮控件添加图片的方法有很多种: 直接调用SetBitmap:  CButton pButton->SetBitmap(hBitmap); 使用CButtonST控件: 使用CDC: 使用 ...

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

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

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

    上一节是关于列表视图控件List Control的上半部分,简单介绍了列表视图控件,其通知消息的处理和有关结构体的定义.本节继续讲解下半部分,包括列表视图控件的创建.CListCtrl类的主要成员函数 ...

随机推荐

  1. netstat -pa --unix >>test.txt

    netstat -pa --unix >>test.txt 输出套接字 命名socket信息

  2. VMWare 禁用虚拟内存文件(*.vmem)

    1.使用 VMWare 虚拟机,虚拟机启动后,会在虚拟机目录下建立一个与虚拟内存大小相同的 .vmem文件,例如:564db13c-c92d-3d3a-41a0-f62af7536fda.vmem. ...

  3. Foxmail公司邮箱配置

    1.打开Foxmail点击新建输入账户密码,点击创建: 2.勾选IMAP服务器的ssl,修改SMTP服务器端口为587 点击应用,账号创建完成.可以拉取和发送邮件了:

  4. Batch - FINDSTR

    总结 Searches for strings in files. 在文件中寻找特定的字符串 官方文档 C:\Users\cuixunxu>FINDSTR /? Searches for str ...

  5. Java——面向对象的特征三:多态性

    2.5面向对象的特征三:多态性 2.5.1 关于java语言中的向上转型和向下转型 ①向上转型(upcasting) :  子--->父(自动类型转换) ②向下转型(downcasting) : ...

  6. C++从string中删除所有的某个特定字符【转载】

    转载自https://www.cnblogs.com/7z7chn/p/6341453.html C++中要从string中删除所有某个特定字符, 可用如下代码 str.erase(std::remo ...

  7. 2019 ICPC 南昌网络赛

    2019 ICPC 南昌网络赛 比赛时间:2019.9.8 比赛链接:The 2019 Asia Nanchang First Round Online Programming Contest 总结 ...

  8. mysql8以上版本时区问题:The server time zone value乱码XXXX

    异常类似: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. ...

  9. pycharm快捷键表

    快捷键 作用 ctrl(command)+c 复制 ctrl+v 粘贴 ctrl+z 撤销 ctrl+x 剪切,默认整行 ctrl+a 全选 ctrl+f 查找:选中批量修改 shift+ctrl+z ...

  10. Crane /// 向量旋转+线段树

    题目大意: 给定n条首尾相接的线段的长度 第一条从0,0开始,所有线段垂直与x轴向上延伸 给定c次操作 每次操作给定 s,a 使得 由第s条线段的角度 逆时针旋转a后 达到第s+1条线段的角度 每次操 ...