VS2010/MFC之按鈕程式設計例項?

Tags: 網站, 按鈕, 例項,

使用MFC實現如下圖的 網站選擇並顯示的功能

VS2010/MFC之按鈕程式設計例項

工具/原料

Win7 x64

Visual Studio 2010

編輯介面

建立一個基於對話方塊的MFC工程,名稱設為“Example23”。在自動生成的主對話方塊IDD_EXAMPLE23_DIALOG的模板中,刪除“TODO: Place dialog controls here.”靜態文字框,新增兩個Group Box,屬性Caption分別改為“網站型別”、“網站”。

VS2010/MFC之按鈕程式設計例項

在Group Box“網站型別”中加入三個Radio Button,Caption分別設為“門戶”、“論壇”和“部落格”,ID分別設為IDC_PORTAL_RADIO、IDC_FORUM_RADIO和IDC_BLOG_RADIO。

在Group Box“網站”中加入六個Check Box,Caption分別設為“科比”、“新浪”、“天涯論壇”、“韓寒部落格”、“網易”和“鳳凰網論壇”,ID分別設為IDC_CHECK1、IDC_CHECK2、IDC_CHECK3、IDC_CHECK4、IDC_CHECK5和IDC_CHECK6。

VS2010/MFC之按鈕程式設計例項

為每個複選框新增CButton型別的變數m_check1、m_check2、m_check3、m_check4、m_check5和m_check6。

VS2010/MFC之按鈕程式設計例項

在兩個Group Box下面,新增一個靜態文字框和一個編輯框。靜態文字框的Caption設為“選擇的網站:”。編輯框的ID設為IDC_WEBSITE_SEL_EDIT,屬性Read Only改為True,使此編輯框為只讀狀態,不允許使用者編輯。

VS2010/MFC之按鈕程式設計例項

VS2010/MFC之按鈕程式設計例項

新增程式碼

在“門戶”按鈕裡面新增如下程式碼

// 如果選擇了“門戶”單選按鈕,則啟用複選框“新浪”和“網易”,其他複選框禁用並非選中

InitAllCheckBoxStatus();

m_check2.EnableWindow(TRUE);

m_check5.EnableWindow(TRUE);

VS2010/MFC之按鈕程式設計例項

在“論壇”按鈕裡面新增如下程式碼

// 如果選擇了“論壇”單選按鈕,則啟用複選框“天涯論壇”和“鳳凰網論壇”,其他複選框禁用並非選中

InitAllCheckBoxStatus();

m_check3.EnableWindow(TRUE);

m_check6.EnableWindow(TRUE);

VS2010/MFC之按鈕程式設計例項

在“部落格”按鈕裡面新增如下程式碼

// 如果選擇了“部落格”單選按鈕,則啟用複選框“雞啄米”和“韓寒部落格”,其他複選框禁用並非選中

InitAllCheckBoxStatus();

m_check1.EnableWindow(TRUE);

m_check4.EnableWindow(TRUE);

VS2010/MFC之按鈕程式設計例項

初始化所有複選框的狀態,即全部禁用,全部非選中

在cpp檔案最後面新增下面的函式

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);

}

VS2010/MFC之按鈕程式設計例項

宣告上面的函式,在h檔案裡面新增下面的變數

public:

void InitAllCheckBoxStatus();

VS2010/MFC之按鈕程式設計例項

程式碼改進

程式執行後,我們希望網站型別預設選擇為“門戶”,則修改對話方塊初始化函式如下

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

VS2010/MFC之按鈕程式設計例項

點選“確定”後,將選擇的網站名字顯示到編輯框中,那麼需要修改“確定”按鈕

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();

VS2010/MFC之按鈕程式設計例項

最後執行

VS2010/MFC之按鈕程式設計例項

網站, 按鈕, 例項,
相關問題答案