MFC單選控制元件Radio Button與選擇框控制元件Chexk Box使用指南
本文是學習雞啄米VS2010入門教程的心得體會,特此記錄下來方便日後查詢。
單選控制元件就是點一下前面會有一個圓圈的控制元件,選擇框就是點一下前面會打√的控制元件。
1.首先隨便起個名建立一個MFC對話方塊專案,這裡我起名為Univers。
2.新建2個Group Box控制元件,把Caption屬性分別改為"遊戲型別"和"遊戲"。
3.在遊戲型別Group Box控制元件內新增3個單選按鈕Radio Button控制元件。
4.在"遊戲"Group Box控制元件內新增如下圖6個選擇框控制元件Chexk Box控制元件。
5.然後為每個複選框新增CButton型別的變數m_check1、m_check2、m_check3、m_check4、m_check5和m_check6。
6.開啟類選擇CUniversDlg類,然後點選"成員變數",點選"新增變數",為IDC_CHECK1~6分別新增成員變數。
7.新增一個編輯框控制元件Edit Control,並把它的Read Only屬性改為True。也就是隻讀屬性,不允許編輯。在編輯框旁邊加一個靜態文字框修改標題為:選擇的遊戲。
8.開啟類嚮導,給類CUniversDlg新增一個方法:InitAllCheckBoxStatus 下面是函式實現。此函式會在切換不同的遊戲型別前初始化所有控制元件。
void CUniversDlg::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); }
CButton::SetCheck函式
設定或重置單選按鈕或複選框的狀態。
void SetCheck(
int nCheck
); //函式原型
引數:
BST_UNCHECKED --未選中狀態也可以填數字0
BST_CHECKED --選中狀態也可以填數字1
BST_INDETERMINATE --將按鈕狀態設定為不確定。僅當按鈕具有BS_3STATE或BS_AUTO3STATE樣式時,才能使用此值。
9.給3個單選按鈕新增事件處理程式
void CUniversDlg::OnBnClickedRadio1() { // TODO: 在此新增控制元件通知處理程式程式碼 //選擇"FPS"則啟用CS GO和地鐵2033 InitAllCheckBoxStatus();//初始化所有控制元件的狀態 m_check1.EnableWindow(TRUE); m_check4.EnableWindow(TRUE); } void CUniversDlg::OnBnClickedRadio2() { // TODO: 在此新增控制元件通知處理程式程式碼 //選擇RPG則啟用輻射4和最終幻想7 InitAllCheckBoxStatus(); m_check2.EnableWindow(TRUE); m_check5.EnableWindow(TRUE); } void CUniversDlg::OnBnClickedRadio3() { // TODO: 在此新增控制元件通知處理程式程式碼 //選擇ACG則啟用 命運石之門和秋之回憶2 InitAllCheckBoxStatus(); m_check3.EnableWindow(TRUE); m_check6.EnableWindow(TRUE); }
CMFCToolBarComboBoxButton :: EnableWindow()函式
啟用或禁用編輯框和組合框。
引數:TRUE啟用編輯框,此時編輯框處於可打√的狀態;FALSE禁用編輯和組合框,此時編輯框會處於灰色不可選中狀態。
10.為了讓視窗載入完成後預設選中第一項"FPS"需要設定一下CUniversDlg::OnInitDialog()函式。
// TODO: 在此新增額外的初始化程式碼
CheckDlgButton(IDC_RADIO1, 1); //修改按鈕1的狀態
OnBnClickedRadio1(); //啟用相應的選擇框
COleControlContainer :: CheckDlgButton
修改按鈕的當前狀態。
virtual void CheckDlgButton(
int nIDButton,
UINT nCheck
);
引數1:要修改的按鈕的ID。
引數2:
指定按鈕的狀態。可以是以下之一:
BST_CHECKED --將按鈕狀態設定為選中狀態。
BST_INDETERMINATE --將按鈕狀態設定為灰色,表示不確定狀態。僅當按鈕具有BS_3STATE或BS_AUTO3STATE樣式時才使用此值。
BST_UNCHECKED --將按鈕狀態設定為已清除。
11.選擇完後點擊確定讓編輯框顯示我們選中的專案,因此需要設定一下確定按鈕的任務處理函式。
void CUniversDlg::OnBnClickedOk()
{
// TODO: 在此新增控制元件通知處理程式程式碼
//CDialogEx::OnOK();
CString strWebsiteSel;// 選擇的網站
if (m_check1.GetCheck()==1)
{
strWebsiteSel += L"CS GO ";
}
if (m_check2.GetCheck()==1)
{
strWebsiteSel += L"輻射4 ";
}
if (m_check3.GetCheck()==1)
{
strWebsiteSel += L"命運石之門 ";
}
if (m_check4.GetCheck()==1)
{
strWebsiteSel += L"地鐵2033 ";
}
if (m_check5.GetCheck()==1)
{
strWebsiteSel += L"最終幻想7 ";
}
if (m_check6.GetCheck()==1)
{
strWebsiteSel += L"秋之回憶2 ";
}
// 將結果字串顯示於“選擇的遊戲”後的編輯框中
SetDlgItemText(IDC_WEBSITE_SEL_EDIT, strWebsiteSel); //設定編輯框內的文字
}
CButton::GetCheck
檢索單選按鈕或複選框的狀態。
int GetCheck( ) const;
返回值:
BST_UNCHECKED --按鈕狀態未選中。
BST_CHECKED --按鈕處於選中狀態。
BST_INDETERMINATE --按鈕狀態是不確定的(僅當按鈕具有BS_3STATE或BS_AUTO3STATE樣式時才適用)。
如果按鈕具有任何其他樣式,則返回值為BST_UNCHECKED。
最終效果: