VS2019/MFC編程入門之經常使用控件:按鈕控件的編程實例

上一節VS2010/MFC編程入門教程中講了按鈕控件Button、Radio Button和Check Box的基本用法,本節就繼續講按鈕控件的內容,經過一個實例讓你們更清楚按鈕控件在實際的軟件開發中如何使用。html

由於Button控件在前面的例子中涉及到了,比較簡單,本文就不做深刻分析了,而是重點講解單選按鈕Radio Button、複選框Check Box的使用。編程

Xtreme Toolkit Pro是屢獲殊榮的VC界面庫,是MFC開發中最全面界面控件套包,它提供了Windows開發所須要的11種主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。app

點擊下載最新版Xtreme Toolkit Proless

按鈕控件實例的功能函數

首先介紹此實例實現的功能。此實例用來根據網站類型選擇網站,並將選擇的網站的名稱顯示到編輯框中。網站類型有「門戶」、「論壇」和「博客」三種,爲單選按鈕。網站有:新浪、天涯論壇、網易和鳳凰網論壇,均爲複選框。網站

當選中某種網站類型即點了某個單選按鈕時,其對應的網站的複選框就激活,其餘則禁用,不容許選擇,且爲非選中狀態。例如,若是選中了「門戶」單選按鈕,則「新浪」、「網易」複選框激活,容許用戶選擇,而其餘複選框則禁用。this

按鈕控件實例的實現url

下面爲你們詳細闡述此實例的編寫步驟。.net

1. 建立一個基於對話框的MFC工程,名稱設爲「Example23」。code

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_CHECK一、IDC_CHECK二、IDC_CHECK三、IDC_CHECK四、IDC_CHECK5和IDC_CHECK6。而後爲每一個複選框添加CButton類型的變量m_check一、m_check二、m_check三、m_check四、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++代碼

void CExample23Dlg::OnBnClickedPortalRadio()
{
// TODO: Add your control notification handler code here
// 若是選擇了「門戶」單選按鈕,則激活複選框「新浪」和「網易」,其餘複選框禁用並不是選中
InitAllCheckBoxStatus();
m_check2.EnableWindow(TRUE);
m_check5.EnableWindow(TRUE);
}
void CExample23Dlg::OnBnClickedForumRadio()
{
// TODO: Add your control notification handler code here
// 若是選擇了「論壇」單選按鈕,則激活複選框「天涯論壇」和「鳳凰網論壇」,其餘複選框禁用並不是選中
InitAllCheckBoxStatus();
m_check3.EnableWindow(TRUE);
m_check6.EnableWindow(TRUE);
}
void CExample23Dlg::OnBnClickedBlogRadio()
{
// TODO: Add your control notification handler code here
// 若是選擇了「博客」單選按鈕,則激活複選框「雞啄米」和「韓寒博客」,其餘複選框禁用並不是選中
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();
// 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
// 默認選中「門戶」單選按鈕
CheckDlgButton(IDC_PORTAL_RADIO, 1);
OnBnClickedPortalRadio();
return TRUE;  // return TRUE  unless you set the focus to a control
}

9. 點擊「肯定」後,將選擇的網站名字顯示到編輯框中,那麼須要修改「肯定」按鈕(原來的OK按鈕)的消息處理函數CExample23Dlg::OnBnClickedOk()以下:

C++代碼

void CExample23Dlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
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);
// 爲了不點「肯定」後對話框退出,將OnOk注掉
//CDialogEx::OnOK();
}

10. 到此程序編寫完成。運行程序彈出結果對話框,選擇網站後界面以下圖:

VS2010/MFC編程入門之二十三(經常使用控件:按鈕控件的編程實例)

按鈕控件的內容就這些了。掌握了按鈕控件的基本用法,又動手編寫了這個實例後,相信你們對按鈕控件已經很熟悉了。

轉載自:http://www.jizhuomi.com/software/184.html

相關文章
相關標籤/搜索