1. 程式人生 > >MFC單選控制元件Radio Button與選擇框控制元件Chexk Box使用指南

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。

 

最終效果:

 

示例工程:https://download.csdn.net/download/l198738655/10686052