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):列表框和組合框 |
---|