轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2021-03-10 11:15:19.837|閱讀 805 次
概述:上一節(jié)VS2010/MFC編程入門(mén)教程中雞啄米講了按鈕控件Button、Radio Button和Check Box的基本用法,本節(jié)就繼續(xù)講按鈕控件的內(nèi)容,通過(guò)一個(gè)實(shí)例讓大家更清楚按鈕控件在實(shí)際的軟件開(kāi)發(fā)中如何使用。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
上一節(jié)VS2010/MFC編程入門(mén)教程中講了按鈕控件Button、Radio Button和Check Box的基本用法,本節(jié)就繼續(xù)講按鈕控件的內(nèi)容,通過(guò)一個(gè)實(shí)例讓大家更清楚按鈕控件在實(shí)際的軟件開(kāi)發(fā)中如何使用。
因?yàn)锽utton控件在前面的例子中涉及到了,比較簡(jiǎn)單,本文就不作深入分析了,而是重點(diǎn)講解單選按鈕Radio Button、復(fù)選框Check Box的使用。
Xtreme Toolkit Pro是屢獲殊榮的VC界面庫(kù),是MFC開(kāi)發(fā)中最全面界面控件套包,它提供了Windows開(kāi)發(fā)所需要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
點(diǎn)擊下載最新版Xtreme Toolkit Pro
按鈕控件實(shí)例的功能
首先介紹此實(shí)例實(shí)現(xiàn)的功能。此實(shí)例用來(lái)根據(jù)網(wǎng)站類(lèi)型選擇網(wǎng)站,并將選擇的網(wǎng)站的名稱(chēng)顯示到編輯框中。網(wǎng)站類(lèi)型有“門(mén)戶”、“論壇”和“博客”三種,為單選按鈕。網(wǎng)站有:新浪、天涯論壇、網(wǎng)易和鳳凰網(wǎng)論壇,均為復(fù)選框。
當(dāng)選中某種網(wǎng)站類(lèi)型即點(diǎn)了某個(gè)單選按鈕時(shí),其對(duì)應(yīng)的網(wǎng)站的復(fù)選框就激活,其他則禁用,不允許選擇,且為非選中狀態(tài)。例如,如果選中了“門(mén)戶”單選按鈕,則“新浪”、“網(wǎng)易”復(fù)選框激活,允許用戶選擇,而其他復(fù)選框則禁用。
按鈕控件實(shí)例的實(shí)現(xiàn)
下面為大家詳細(xì)闡述此實(shí)例的編寫(xiě)步驟。
1. 創(chuàng)建一個(gè)基于對(duì)話框的MFC工程,名稱(chēng)設(shè)為“Example23”。
2. 在自動(dòng)生成的主對(duì)話框IDD_EXAMPLE23_DIALOG的模板中,刪除“TODO: Place dialog controls here.”靜態(tài)文本框,添加兩個(gè)Group Box,屬性Caption分別改為“網(wǎng)站類(lèi)型”、“網(wǎng)站”。
3. 在Group Box“網(wǎng)站類(lèi)型”中加入三個(gè)Radio Button,Caption分別設(shè)為“門(mén)戶”、“論壇”和“博客”,ID分別設(shè)為IDC_PORTAL_RADIO、IDC_FORUM_RADIO和IDC_BLOG_RADIO。
4. 在Group Box“網(wǎng)站”中加入六個(gè)Check Box,Caption分別設(shè)為“新浪”、“天涯論壇”、“網(wǎng)易”和“鳳凰網(wǎng)論壇”,ID分別設(shè)為IDC_CHECK1、IDC_CHECK2、IDC_CHECK3、IDC_CHECK4、IDC_CHECK5和IDC_CHECK6。然后為每個(gè)復(fù)選框添加CButton類(lèi)型的變量m_check1、m_check2、m_check3、m_check4、m_check5和m_check6。
5. 在兩個(gè)Group Box下面,添加一個(gè)靜態(tài)文本框和一個(gè)編輯框。靜態(tài)文本框的Caption設(shè)為“選擇的網(wǎng)站:”。編輯框的ID設(shè)為IDC_WEBSITE_SEL_EDIT,屬性Read Only改為T(mén)rue,使此編輯框?yàn)橹蛔x狀態(tài),不允許用戶編輯。
6. 將“OK”按鈕的Caption修改為“確定”,“Cancel”按鈕的Caption修改為“退出”。到此,對(duì)話框模板就修改好了,如下圖:
7. 為“門(mén)戶”、“論壇”和“博客”三個(gè)單選按鈕分別添加點(diǎn)擊消息的消息處理函數(shù)CExample23Dlg::OnBnClickedPortalRadio()、CExample23Dlg::OnBnClickedForumRadio()和CExample23Dlg::OnBnClickedBlogRadio()。
在某個(gè)單選按鈕被點(diǎn)擊之后,我們可以先將六個(gè)網(wǎng)站復(fù)選框都禁用且置為非選中狀態(tài),而后將選擇的網(wǎng)站類(lèi)型對(duì)應(yīng)的網(wǎng)站復(fù)選框激活。為了代碼復(fù)用,我們將置所有復(fù)選框?yàn)榻们曳沁x中狀態(tài)的操作寫(xiě)到一個(gè)函數(shù)里,此函數(shù)為CExample23Dlg::InitAllCheckBoxStatus(),然后就可以在三個(gè)單選按鈕的消息處理函數(shù)中調(diào)用InitAllCheckBoxStatus(),實(shí)現(xiàn)復(fù)選框狀態(tài)的初始化。
三個(gè)消息處理函數(shù)及InitAllCheckBoxStatus()函數(shù)的實(shí)現(xiàn)如下:
void CExample23Dlg::OnBnClickedPortalRadio() { // TODO: Add your control notification handler code here // 如果選擇了“門(mén)戶”單選按鈕,則激活復(fù)選框“新浪”和“網(wǎng)易”,其他復(fù)選框禁用并非選中 InitAllCheckBoxStatus(); m_check2.EnableWindow(TRUE); m_check5.EnableWindow(TRUE); } void CExample23Dlg::OnBnClickedForumRadio() { // TODO: Add your control notification handler code here // 如果選擇了“論壇”單選按鈕,則激活復(fù)選框“天涯論壇”和“鳳凰網(wǎng)論壇”,其他復(fù)選框禁用并非選中 InitAllCheckBoxStatus(); m_check3.EnableWindow(TRUE); m_check6.EnableWindow(TRUE); } void CExample23Dlg::OnBnClickedBlogRadio() { // TODO: Add your control notification handler code here // 如果選擇了“博客”單選按鈕,則激活復(fù)選框“雞啄米”和“韓寒博客”,其他復(fù)選框禁用并非選中 InitAllCheckBoxStatus(); m_check1.EnableWindow(TRUE); m_check4.EnableWindow(TRUE); } // 初始化所有復(fù)選框的狀態(tài),即全部禁用,全部非選中 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. 程序運(yùn)行后,我們希望網(wǎng)站類(lèi)型默認(rèn)選擇為“門(mén)戶”,則修改對(duì)話框初始化函數(shù)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 // 默認(rèn)選中“門(mén)戶”單選按鈕 CheckDlgButton(IDC_PORTAL_RADIO, 1); OnBnClickedPortalRadio(); return TRUE; // return TRUE unless you set the focus to a control }
9. 點(diǎn)擊“確定”后,將選擇的網(wǎng)站名字顯示到編輯框中,那么需要修改“確定”按鈕(原來(lái)的OK按鈕)的消息處理函數(shù)CExample23Dlg::OnBnClickedOk()如下:
C++代碼
void CExample23Dlg::OnBnClickedOk() { // TODO: Add your control notification handler code here CString strWebsiteSel; // 選擇的網(wǎng)站 // 若選中“雞啄米”則將其加入結(jié)果字符串 if (1 == m_check1.GetCheck()) { strWebsiteSel += _T("雞啄米 "); } // 若選中“新浪”則將其加入結(jié)果字符串 if (1 == m_check2.GetCheck()) { strWebsiteSel += _T("新浪 "); } // 若選中“天涯論壇”則將其加入結(jié)果字符串 if (1 == m_check3.GetCheck()) { strWebsiteSel += _T("天涯論壇 "); } // 若選中“韓寒博客”則將其加入結(jié)果字符串 if (1 == m_check4.GetCheck()) { strWebsiteSel += _T("韓寒博客 "); } // 若選中“網(wǎng)易”則將其加入結(jié)果字符串 if (1 == m_check5.GetCheck()) { strWebsiteSel += _T("網(wǎng)易 "); } // 若選中“鳳凰網(wǎng)論壇”則將其加入結(jié)果字符串 if (1 == m_check6.GetCheck()) { strWebsiteSel += _T("鳳凰網(wǎng)論壇 "); } // 將結(jié)果字符串顯示于“選擇的網(wǎng)站”后的編輯框中 SetDlgItemText(IDC_WEBSITE_SEL_EDIT, strWebsiteSel); // 為了避免點(diǎn)“確定”后對(duì)話框退出,將OnOk注掉 //CDialogEx::OnOK(); }
10. 到此程序編寫(xiě)完成。運(yùn)行程序彈出結(jié)果對(duì)話框,選擇網(wǎng)站后界面如下圖:
按鈕控件的內(nèi)容就這些了。掌握了按鈕控件的基本用法,又動(dòng)手編寫(xiě)了這個(gè)實(shí)例后,相信大家對(duì)按鈕控件已經(jīng)很熟悉了。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn