zoukankan      html  css  js  c++  java
  • 鸡啄米vc++2010系列22(常用控件:按钮控件的编程实例)

     因为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修改为“退出”。到此,对话框模板就修改好了,如下图:

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

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

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

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

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

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

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

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

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


  • 相关阅读:
    WCF使用net.tcp寄宿到IIS中
    (转)Dubbo 简单Dome搭建
    Linux压缩解压
    Linux关闭开启防火墙命令
    简单登录(jsp+servlet)
    UVa 10285 Longest Run on a Snowboard [DP]
    UVa 1218 Perfect Service [DFS+DP]
    第三届ACM山东省赛 Pick apples [贪心+动规]
    ZOJ 3326
    HDU 1029
  • 原文地址:https://www.cnblogs.com/zfluo/p/5131903.html
Copyright © 2011-2022 走看看