1. 程式人生 > >MFC介面程式設計基礎(12):組框、單選按鈕和複選框

MFC介面程式設計基礎(12):組框、單選按鈕和複選框

上一篇:MFC介面程式設計基礎(11):靜態文字框、命令按鈕和編輯框 下一篇:MFC介面程式設計基礎(13):列表框和組合框

組框、單選按鈕和複選框都是對話方塊的常見控制元件。組框與靜態文字框一樣是CStatic類的物件,單選按鈕和複選框與命令按鈕一樣都是CButton類的物件。

組框

當對話方塊上控制元件較多時,可以使用組框將一組相關的控制元件框起來,達到標識一組控制元件的作用。組框不需要連線變數,也不需要處理訊息。組框的重要屬性有:

  • ID :所有組框的預設 ID 都是 IDC_STATIC ,不需要重新設定。
  • 標題:該屬性決定組框上的標題文字。

單選按鈕

  • 注意事項
    同一組中的按鈕必須一個接一個地放進對話方塊中,中間不能插入其他控制元件,並且一個組的第一個按扭的“Group”屬性需要設定為True,表示一組控制元件的開始。
  • 重要屬性
    ①:ID :每個命令按鈕都有一個預設 ID ,如 IDC_RADIO1 ,可以重新設定。
    ②:標題:該屬性值就是單選按鈕右邊顯示的文字標題。
    ③:Group :一組中第一個按鈕選中該屬性,表示它是一組的開始。
  • 訊息
    單選按鈕能處理的訊息是BN_CLICKED。
  • 重要函式
  • 設定單選按鈕選中狀態
    初始時,可使用 Windows API 函式 CheckRadioButton() 設定一組單選按鈕中選中的按鈕。 形式:
void CheckRadioButton(int nIDFirstButton, int nIDLastButton, int nIDCheckButton);

說明:
①:nIDFirstButton 是一組中第一個單選按鈕的 ID ;
②:nIDLastButton 是一組中最後一個單選按鈕的 ID ;
③:nIDCheckButton 為初始時設定為選中的那個單選按鈕的 ID 。

  • 判定單選按鈕是否被選定
    函式原型如下:
UINT IsDlgButtonChecked( int nIDButton ) const; 

說明:如果 ID 為 nIDButton 的按鈕被選定,則該函式的返回值為 true ,否則為 false 。

【例】

設計一個如圖所示的程式。當單擊“ 確定 ”後,用 MessageBox 函式顯示一個如圖所示的訊息框。
在這裡插入圖片描述

  • 分組
    例:將radio1、radio2分為1組,radio3、radio4、radio5分為另一組;
    分組方法:
    第一組:

  • 設定 radio1 的屬性:group設定為true.

  • 設定 radio2 的屬性: group設為false
    第二組:

  • 設定 radio3 的屬性:group設定為true

  • 設定 radio4 的屬性:group設為false

  • 設定 radio5 的屬性:group設為false
    按CTRL+D,保證同一組內的radio的tab序號是連續的;
    在這裡插入圖片描述

  • 介面設計
    首先建立一個對話方塊程式框架,然後放置各控制元件,進行屬性設定,將編輯框連線到 CString 型別的 m_edit 變數,其餘控制元件不需要連線變數。將“男”和“教授”對應的單選鈕的Group屬性勾上。

  • 初始化
    單選按鈕的初始化工作在對話方塊的初始化函式實現。

BOOL CTESTDlg::OnInitDialog() 
{ 
	 ┆ 
  CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO1); //
  CheckRadioButton(IDC_RADIO3, IDC_RADIO5, IDC_RADIO4); 
    ┆ 
}; 
  • 訊息處理函式
void CTESTDlg::OnButton1() 
{ 
 // TODO: Add your control notification handler code here 
	//將控制元件中的資料更新到變數中
	UpdateData(TRUE);
	CString s;
	s += m_edit;
	if (IsDlgButtonChecked(IDC_RADIO1))
	{
		s += " 男 ";
	}
	else if (IsDlgButtonChecked(IDC_RADIO2))
	{
		s += " 女 ";
	}
	if (IsDlgButtonChecked(IDC_RADIO3))
	{
		s += " 教授 ";
	}
	else if (IsDlgButtonChecked(IDC_RADIO4))
	{
		s += " 副教授 ";
	}
	else
	{
		s += " 講師 ";
	}
	MessageBox(s);  
}

複選框

  • 重要屬性
  • ID :每個複選框都有一個預設 ID ,如 IDC_CHECK1 ,可以重新設定。
  • 標題:該屬性值決定了複選框右邊顯示的文字標題。
  • 連線變數
    複選框通常被連線到Value類別BOOL型別的變數。
  • 訊息
    複選框能處理 BN_CLICKED 訊息。

【例】

設計一個如圖所示的程式。當單擊“確定”後,在右邊的編輯框中顯示有關資訊。
在這裡插入圖片描述

  • 介面設計
    首先建立一個對話方塊程式框架,然後放置各控制元件,進行屬性設計,各編輯框和複選框按表連線變數,其餘控制元件不需要連線變數。
    在這裡插入圖片描述
  • 訊息處理函式
void CTESTDlg::OnButton1() 
{ 
// TODO: Add your control notification handler code here 
UpdateData(TRUE);
CString s;
s = m_e1;
s += " 愛好 :\r\n";
if (m_c1) s += "  旅遊\r\n";
if (m_c2) s += "  運動\r\n";
if (m_c3) s += "  音樂\r\n";
m_e2 = s;
UpdateData(FALSE);
}

對話方塊是 Windows 應用程式中最常用的一種與使用者互動的方式。使用者通過對話方塊輸入資料,程式通過對話方塊顯示執行的情況。

【例】

設計如圖所示的對話方塊。若選定了“日期”或“時間”複選框,則在對應的只讀編輯框中顯示系統當前日期或時間。
在這裡插入圖片描述

分析: CTime 是 MFC 中的一個類,封裝了日期和時間。它有一個靜態成員 GetCurrentTime() ,返回系統當前的日期和時間。
實現:

  • 介面設計
    首先建立一個對話方塊程式框架,然後放置各控制元件,按表進行屬性設定和連線變數。
    在這裡插入圖片描述

  • 訊息處理函式

………………………………………………………… 
void CTESTDlg::OnCheck1() 
{ 
// TODO: Add your control notification handler code here 
	UpdateData(TRUE); 
	if(m_k1==TRUE) 
	{ 
		CTime time=Ctime::GetCurrentTime(); // 構造“ YYYY.MM.DD ”形式的日期字串
		m_e1=time.Format("%Y.%m.%d"); 
	} 
	else 
		m_e1=""; 
	UpdateData(FALSE); 
} 
…………………………………………………………
void CTESTDlg::OnCheck2() 
{ 
// TODO: Add your control notification handler code here 
	UpdateData(TRUE); 
	if(m_k2==TRUE) 
	{ 
		CTime time=Ctime::GetCurrentTime(); // 構造“ HH:MM:SS ”形式的時間字串 
		m_e2=time.Format("%H:%M:%S");     
	} 
	else 
		m_e2=""; 
	UpdateData(FALSE); 
} 
…………………………………………………………
上一篇:MFC介面程式設計基礎(11):靜態文字框、命令按鈕和編輯框 下一篇:MFC介面程式設計基礎(13):列表框和組合框