? 上一節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++代碼
void?CExample23Dlg::OnBnClickedPortalRadio() ??{ ??????????????InitAllCheckBoxStatus(); ??????m_check2.EnableWindow(TRUE); ??????m_check5.EnableWindow(TRUE); ??} ??????void?CExample23Dlg::OnBnClickedForumRadio() ??{ ??????????????InitAllCheckBoxStatus(); ??????m_check3.EnableWindow(TRUE); ??????m_check6.EnableWindow(TRUE); ??} ??????void?CExample23Dlg::OnBnClickedBlogRadio() ??{ ??????????????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(0); ??????m_check2.SetCheck(0); ??????m_check3.SetCheck(0); ??????m_check4.SetCheck(0); ??????m_check5.SetCheck(0); ??????m_check6.SetCheck(0); ??}?? ?????? 8. 程序運行后,我們希望網站類型默認選擇為“門戶”,則修改對話框初始化函數CExample23Dlg::OnInitDialog()為:
C++代碼
BOOL?CExample23Dlg::OnInitDialog() ??{ ??????CDialogEx::OnInitDialog(); ??????????????????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);??????????????????????CheckDlgButton(IDC_PORTAL_RADIO,?1); ??????OnBnClickedPortalRadio(); ????????return?TRUE;??}?? ?????? 9. 點擊“確定”后,將選擇的網站名字顯示到編輯框中,那么需要修改“確定”按鈕(原來的OK按鈕)的消息處理函數CExample23Dlg::OnBnClickedOk()如下:
C++代碼
void?CExample23Dlg::OnBnClickedOk() ??{ ??????????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. 到此程序編寫完成。運行程序彈出結果對話框,選擇網站后界面如下圖:
?????? 按鈕控件的內容就這些了。掌握了按鈕控件的基本用法,又動手編寫了這個實例后,相信大家對按鈕控件已經很熟悉了。雞啄米歡迎大家繼續來學習交流。
?
轉自:http://www.jizhuomi.com/software/181.html
?
轉載于:https://www.cnblogs.com/gd-luojialin/p/9649974.html
總結
以上是生活随笔為你收集整理的VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。