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

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

因为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++代码

  1. void CExample23Dlg::OnBnClickedPortalRadio()
  2. {
  3. // TODO: Add your control notification handler code here
  4. // 如果选择了“门户”单选按钮,则激活复选框“新浪”和“网易”,其他复选框禁用并非选中
  5. InitAllCheckBoxStatus();
  6. m_check2.EnableWindow(TRUE);
  7. m_check5.EnableWindow(TRUE);
  8. }
  9. void CExample23Dlg::OnBnClickedForumRadio()
  10. {
  11. // TODO: Add your control notification handler code here
  12. // 如果选择了“论坛”单选按钮,则激活复选框“天涯论坛”和“凤凰网论坛”,其他复选框禁用并非选中
  13. InitAllCheckBoxStatus();
  14. m_check3.EnableWindow(TRUE);
  15. m_check6.EnableWindow(TRUE);
  16. }
  17. void CExample23Dlg::OnBnClickedBlogRadio()
  18. {
  19. // TODO: Add your control notification handler code here
  20. // 如果选择了“博客”单选按钮,则激活复选框“鸡啄米”和“韩寒博客”,其他复选框禁用并非选中
  21. InitAllCheckBoxStatus();
  22. m_check1.EnableWindow(TRUE);
  23. m_check4.EnableWindow(TRUE);
  24. }
  25. // 初始化所有复选框的状态,即全部禁用,全部非选中
  26. void CExample23Dlg::InitAllCheckBoxStatus()
  27. {
  28. // 全部禁用
  29. m_check1.EnableWindow(FALSE);
  30. m_check2.EnableWindow(FALSE);
  31. m_check3.EnableWindow(FALSE);
  32. m_check4.EnableWindow(FALSE);
  33. m_check5.EnableWindow(FALSE);
  34. m_check6.EnableWindow(FALSE);
  35. // 全部非选中
  36. m_check1.SetCheck(0);
  37. m_check2.SetCheck(0);
  38. m_check3.SetCheck(0);
  39. m_check4.SetCheck(0);
  40. m_check5.SetCheck(0);
  41. m_check6.SetCheck(0);
  42. }

8. 程序运行后,我们希望网站类型默认选择为“门户”,则修改对话框初始化函数CExample23Dlg::OnInitDialog()为:

C++代码

  1. BOOL CExample23Dlg::OnInitDialog()
  2. {
  3. CDialogEx::OnInitDialog();
  4. // Add "About..." menu item to system menu.
  5. // IDM_ABOUTBOX must be in the system command range.
  6. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  7. ASSERT(IDM_ABOUTBOX < 0xF000);
  8. CMenu* pSysMenu = GetSystemMenu(FALSE);
  9. if (pSysMenu != NULL)
  10. {
  11. BOOL bNameValid;
  12. CString strAboutMenu;
  13. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  14. ASSERT(bNameValid);
  15. if (!strAboutMenu.IsEmpty())
  16. {
  17. pSysMenu->AppendMenu(MF_SEPARATOR);
  18. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  19. }
  20. }
  21. // Set the icon for this dialog.  The framework does this automatically
  22. //  when the application‘s main window is not a dialog
  23. SetIcon(m_hIcon, TRUE);         // Set big icon
  24. SetIcon(m_hIcon, FALSE);        // Set small icon
  25. // TODO: Add extra initialization here
  26. // 默认选中“门户”单选按钮
  27. CheckDlgButton(IDC_PORTAL_RADIO, 1);
  28. OnBnClickedPortalRadio();
  29. return TRUE;  // return TRUE  unless you set the focus to a control
  30. }

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

C++代码

  1. void CExample23Dlg::OnBnClickedOk()
  2. {
  3. // TODO: Add your control notification handler code here
  4. CString strWebsiteSel;         // 选择的网站
  5. // 若选中“鸡啄米”则将其加入结果字符串
  6. if (1 == m_check1.GetCheck())
  7. {
  8. strWebsiteSel += _T("鸡啄米 ");
  9. }
  10. // 若选中“新浪”则将其加入结果字符串
  11. if (1 == m_check2.GetCheck())
  12. {
  13. strWebsiteSel += _T("新浪 ");
  14. }
  15. // 若选中“天涯论坛”则将其加入结果字符串
  16. if (1 == m_check3.GetCheck())
  17. {
  18. strWebsiteSel += _T("天涯论坛 ");
  19. }
  20. // 若选中“韩寒博客”则将其加入结果字符串
  21. if (1 == m_check4.GetCheck())
  22. {
  23. strWebsiteSel += _T("韩寒博客 ");
  24. }
  25. // 若选中“网易”则将其加入结果字符串
  26. if (1 == m_check5.GetCheck())
  27. {
  28. strWebsiteSel += _T("网易 ");
  29. }
  30. // 若选中“凤凰网论坛”则将其加入结果字符串
  31. if (1 == m_check6.GetCheck())
  32. {
  33. strWebsiteSel += _T("凤凰网论坛 ");
  34. }
  35. // 将结果字符串显示于“选择的网站”后的编辑框中
  36. SetDlgItemText(IDC_WEBSITE_SEL_EDIT, strWebsiteSel);
  37. // 为了避免点“确定”后对话框退出,将OnOk注掉
  38. //CDialogEx::OnOK();
  39. }

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

按钮控件的内容就这些了。掌握了按钮控件的基本用法,又动手编写了这个实例后,相信大家对按钮控件已经很熟悉了。鸡啄米欢迎大家继续来学习交流。

原文地址:http://www.jizhuomi.com/software/184.html

时间: 2024-12-17 07:52:13

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

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

因为私人问题,鸡啄米暂停更新了几天,首先向关注鸡啄米动态的朋友说一声抱歉. 言归正传,鸡啄米上一节中讲了编辑框的用法,本节继续讲解常用控件--按钮控件的使用. 按钮控件简介 按钮控件包括命令按钮(Button).单选按钮(Radio Button)和复选框(Check Box)等.命令按钮就是我们前面多次提到的狭义的按钮控件,用来响应用户的鼠标单击操作,进行相应的处理,它可以显示文本也可以嵌入位图.单选按钮使用时,一般是多个组成一组,组中每个单选按钮的选中状态具有互斥关系,即同组的单选按钮只能有

8.15_Linux之bash shell脚本编程入门篇(二)以及文件查找和压缩的使用

bash shell脚本编程入门篇(二) read命令的使用 作用: 使用read来把输入值分配给一个或多个shell变量: -p指定要显示的提示 -t TIMEOUT read从标准输入中读取值,给每个单词分配一个变量,所有剩余单词都被分配给最后一个变量 EX.read -p "Enter a filename:" FILE 条件选择之if的使用 if的作用:选择执行(注意:if语句可嵌套) 单分支 if 判断条件;then 条件为真的分支代码 fi EX.单分支案例 双分支 if

ActionScript3游戏中的图像编程(连载二十三)

2.1 Photoshop图层样式初体验 打开Photoshop CS5,新建一个600*100(单位:像素)的空白文档. 使用“横排文字工具”在画布上拖出一个文本框,字体设置为微软雅黑并加粗(最好是使用直接的粗体,而非仿粗),字号80号,字体颜色#0000FF,文字内容为“Flash艺术编程”. 无法正确完成以上任务的初学者可自行查阅Photoshop的基础教程进行学习. 在图层面板(如果图层面板没打开,就可通过菜单项“窗口”——“菜单”或者按F7调出来)右击文字所在的层,选择 “混合选项”菜

cesium编程入门(四)界面介绍及小控件隐藏

感性认识 界面介绍,viewer Geocoder : 查找位置工具,查找到之后会将镜头对准找到的地址,默认使用bing地图 Home Button :视角返回初始位置. Scene Mode Picker : 选择视角的模式,有三种:3D,2D,哥伦布视图(CV) Base Layer Picker : 图层选择器,选择要显示的地图服务和地形服务. Navigation Help Button :导航帮助按钮,显示默认的地图控制帮助. Animation : 动画器件,控制视图动画的播放速度.

(转载)DLL动态链接库编程入门之二:非MFC DLL

上一节中讲解的是DLL概论及其调试和查看,本节将为大家详解非MFC DLL的相关内容.  1.一个简单的DLL 上一节给出了以静态链接库方式提供add函数接口的方法,接下来我们来看看怎样用动态链接库实现一个同样功能的add函数. 如图1,在VC++中new一个Win32 Dynamic-Link Library工程dllTest.注意不要选择MFC AppWizard(dll),因为用MFC AppWizard(dll)建立的将是后面要讲述的MFC动态链接库. 图1 建立一个非MFC DLL 在

【转】VS2010/MFC编程入门之二十五(常用控件:组合框控件Combo Box)

原文网址:http://www.jizhuomi.com/software/189.html 上一节鸡啄米讲了列表框控件ListBox的使用,本节主要讲解组合框控件Combo Box.组合框同样相当常见,例如,在Windows系统的控制面板上设置语言或位置时,有很多选项,用来进行选择的控件就是组合框控件.它为我们的日常操作提供了很多方便. 组合框控件简介 组合框其实就是把一个编辑框和一个列表框组合到了一起,分为三种:简易(Simple)组合框.下拉式(Dropdown)组合框和下拉列表式(Dro

【转】VS2010/MFC编程入门之二十(常用控件:静态文本框)

本文转自鸡啄米:http://www.jizhuomi.com/software/177.html 感 谢鸡啄米对本文的贡献. 上一节鸡啄米讲了颜色对话框之后,关于对话框的使用和各种通用对话框的介绍就到此为止了.从本节开始鸡啄米将讲解各种常用控件的用法.常用控件主要包括:静态文本框.编辑框.单选按钮.复选框.分组框.列表框.组合框.图片控件.列表控件.树形控件和进度条控件等等.本节教程先来讲解静态文本框的使用. 控件的通知消息 在将静态文本框的使用之前,先大概讲讲控件的通知消息. 当控件有事件发

MFC编程入门之二十六(常用控件:滚动条控件ScrollBar)

回顾上一节,讲的是组合框控件Combo Box的使用.本节详解滚动条控件Scroll Bar的相关内容. 滚动条控件简介 滚动条大家也很熟悉了,Windows窗口中很多都有滚动条.前面讲的列表框和组合框设置了相应属性后,如果列表项显示不下也会出现滚动条.滚动条分为水平滚动条(Horizontal Scroll Bar)和垂直滚动条(Vertical Scroll Bar)两种.滚动条中有一个滚动块,用于标识滚动条当前滚动的位置.我们可以拖动滚动条,也可以用鼠标点击滚动条某一位置使滚动块移动. 从

MFC编程入门之二十一(常用控件:编辑框Edit Control)

上一节讲了静态文本框,本节讲的是编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框的使用. 编辑框的通知消息 编辑框发生某些事件时会向父窗口发送通知消息.在对话框模板中的编辑框上点击右键,选择"Add Event Handler",为编辑框添加消息处理函数时,可以在"Message type"列表中看到这些消息.下面简单介绍编辑框的部分通知消息. EN_C