使用MFC實現如下圖的 網站選擇並顯示的功能
工具/原料
Win7 x64
Visual Studio 2010
編輯介面
建立一個基於對話方塊的MFC工程,名稱設為“Example23”。在自動生成的主對話方塊IDD_EXAMPLE23_DIALOG的模板中,刪除“TODO: Place dialog controls here.”靜態文字框,新增兩個Group Box,屬性Caption分別改為“網站型別”、“網站”。
在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。
為每個複選框新增CButton型別的變數m_check1、m_check2、m_check3、m_check4、m_check5和m_check6。
在兩個Group Box下面,新增一個靜態文字框和一個編輯框。靜態文字框的Caption設為“選擇的網站:”。編輯框的ID設為IDC_WEBSITE_SEL_EDIT,屬性Read Only改為True,使此編輯框為只讀狀態,不允許使用者編輯。
新增程式碼
在“門戶”按鈕裡面新增如下程式碼
// 如果選擇了“門戶”單選按鈕,則啟用複選框“新浪”和“網易”,其他複選框禁用並非選中
InitAllCheckBoxStatus();
m_check2.EnableWindow(TRUE);
m_check5.EnableWindow(TRUE);
在“論壇”按鈕裡面新增如下程式碼
// 如果選擇了“論壇”單選按鈕,則啟用複選框“天涯論壇”和“鳳凰網論壇”,其他複選框禁用並非選中
InitAllCheckBoxStatus();
m_check3.EnableWindow(TRUE);
m_check6.EnableWindow(TRUE);
在“部落格”按鈕裡面新增如下程式碼
// 如果選擇了“部落格”單選按鈕,則啟用複選框“雞啄米”和“韓寒部落格”,其他複選框禁用並非選中
InitAllCheckBoxStatus();
m_check1.EnableWindow(TRUE);
m_check4.EnableWindow(TRUE);
初始化所有複選框的狀態,即全部禁用,全部非選中
在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);
}
宣告上面的函式,在h檔案裡面新增下面的變數
public:
void InitAllCheckBoxStatus();
程式碼改進
程式執行後,我們希望網站型別預設選擇為“門戶”,則修改對話方塊初始化函式如下
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
點選“確定”後,將選擇的網站名字顯示到編輯框中,那麼需要修改“確定”按鈕
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();
最後執行