上一節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修改為“退出”。到此,對話框模板就修改好了,如下圖:

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編程入門之二十三(常用控件:按鈕控件的編程實例)

       按鈕控件的內容就這些了。掌握了按鈕控件的基本用法,又動手編寫了這個實例后,相信大家對按鈕控件已經很熟悉了。雞啄米歡迎大家繼續來學習交流。

除非特別注明,雞啄米文章均為原創
轉載請標明本文地址:http://www.9385095.live/software/184.html
2012年6月5日
作者:雞啄米 分類:軟件開發 瀏覽: 評論:32