第二章按鈕、編輯框和複選框
本章將通過一個實例程序介紹按鈕、編輯框和複選框這三個控件的設計和使用技巧。控件設計的一般過程是用可視化操作在對話框中加入控件,設置屬性,編譯連接並觀看效果、爲控件定義變量和編寫代碼。如果使用控件較多,可以事先編一個控件屬性表,參考表中信息設計,這樣可以提高工作效率,減少設計錯誤和幫助糾錯。下面我們先設計和運行例程,然後總結一般方法。
本章要點
編輯框的設計和使用
用按鈕和複選框來控制
調用外部的可執行程序
2.1 例程Test.exe的界面和功能
Test.exe的界面如圖Chap2-01所示。
圖chap02-1
本例程的功能如下:上方的靜態文本框用於顯示信息。下面的編輯框用於輸入字符串,兩個複選框用來控制編輯框的狀態,左邊的“不選”就會隱藏,左邊的“不選”就會就使它不激活,不能輸入了。按下[測試]按鈕會在編輯框中顯示一段預先設置的文字,按下[清除]按鈕則清除編輯框中的文字。當編輯框內按上面的提示輸入字符串後,就會執行相應的程序(其它字符串則無反應)。
2.2 創建工程和設計界面
一 創建工程
位置 =D:\VC60\CH02\;程序名=Test
Step1 應答:對話框模式
Step2 應答:默認
Step3 應答:MFC標準和靜態庫連接
Step4 應答:默認
二 設計界面
按下列的屬性表設計
控件 | 標題 | ID | 屬性 | 擴展 |
靜態文本 |
(見圖 ch02-1) |
IDC-STATIC | ||
編輯框 | IDC_TEST_EDIT | |||
複選框 | 顯示編輯框 | IDC_VISIBLE_CHECK | ||
複選框 | 編輯框可輸入 | IDC_ENABLED_CHECK | ||
按鈕 | 測試 | IDC_TEST_BUTTON | 可顯示,TAB | Client,Static,Modal(√) |
按鈕 | 清除 | IDC_CLEAR_BUTTON | 可顯示,TAB | Client,Static,Modal(√) |
按鈕 | EXIT | IDC_EXIT_BUTTON | 可顯示,TAB | Client,Static,Modal(√) |
組框 | Test | IDC_TEST_GROUP | ||
對話框 | Test程序 | IDC_TEST_DIALOG |
設計好的界面如圖chap02-2:
圖chap02-2
三 添加變量和事件
下一步是設置變量和添加事件,編輯框中輸入的內容程序中要使用,所以需要設置字符串型變量,輸入後將調用函數去執行外部程序,因此需要添加EN_CHANGE。打開“類嚮導”的“的添加變量頁”,選擇編輯框的ID,點擊"Add...",輸入變量名=m_Test_Edit ,類型=String。再回到“消息映射”頁,選中編輯框的ID,選擇事件EN_CHANGE,點擊"Add Function",就生成了OnChangeTestEdit()函數,點擊"Edit code"就可以立即輸入代碼。
現在我們不輸入代碼,先設置其他的變量和事件。按下表設置兩個複選框的變量,用Bool型來表示複選框是否被選中。如是“是”,BN_CLICKED事件的代碼是“設置編輯框的顯示屬性爲是”,否則編輯框不可顯示。同樣地,添加IDC_ENABLED_CHECK的變量和事件,代碼的功能是“當m_Enavbled_Check == TRUE 時設置編輯框的激活屬性”。
要添加的變量和事件函數表 |
||||
控件 | 標題 | ID | 添加變量 | 添加事件 |
編輯框 | IDC_TEST_EDIT | String m_Test_Edit | EN_CHANGE | |
複選框 | 顯示編輯框 | IDC_VISIBLE_CHECK | Bool m_Visible_Check | BN_CLICKED |
複選框 | 編輯框可輸入 | IDC_ENABLED_CHECK | Bool m_Enavbled_Check | BN_CLICKED |
2.3 編寫代碼
1 初始化對話框
在OnInitDialog()函數中置兩個複選框變量的值爲真TRUE。代碼如下:
m_Visible_Check = TRUE;
m_Enavbled_Check= TRUE;
UpdateData(FALSE);
使對話框不能更新。
2 兩複選框的“點擊”事件
點擊“顯示編輯框”將改變m_Visible_Check的真假之值,根據這個值設置編輯框爲可見活不可見,代碼如下:
void CTestDlg::OnVisibleCheck()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_Visible_Check == TRUE)
GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_SHOW);
else
GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_HIDE);
}
“顯示編輯框”複選框的代碼如下:
void CTestDlg::OnEnabledCheck()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
if(m_Enabled_Check == TRUE)
GetDlgItem(IDC_TEST_EDIT)->EnableWindow(TRUE);
else
GetDlgItem(IDC_TEST_EDIT)->EnableWindow(FALSE);
}
操作時函數體是自動生成的,你只要輸入TODO後面的代碼。
代碼的含義:
函數GetDlgItem(ID)的功能是返回ID所對應的控件對象,->ShowWindow(常量)則顯示或隱藏該控件,常量SW_SHOW和SW_HIDE必須大寫。所以
GetDlgItem(IDC_TEST_EDIT)->ShowWindow(SW_HIDE);
表示“隱藏編輯框”。
函數EnableWindow(TRUE)的功能是“激活編輯框”。
3 編輯框添加EN_CHANGE事件及其代碼
因爲編輯框在輸入某些字符串後,就會執行相應的程序。爲實現這一功能,需要添加EN_CHANGE事件。在類嚮導的消息映射頁上,選定該編輯框的ID,在右邊的列表框中選EN_CHANGE事件。按添加函數後生成OnChangeTestEdit();點擊"Add code"立即輸入代碼。
圖chap02-3
執行外部程序可用函數system(程序名),所以根據編輯框變量m_TestEdit的值選擇要執行的程序。代碼如下:
UpdateData(TRUE); //允許更新,變量的值會改變
CString UpperValue;
UpperValue = m_Test_Edit;
UpperValue.MakeUpper(); //大寫化
if(UpperValue == "MSPAINT")
{
system("Mspaint.exe"); //執行畫圖程序
m_TestEdit = "";
UpdateData(FALSE);
}
if(UpperValue == "CALC")
{
system("calc.exe"); //計算器程序
m_TestEdit = "";
UpdateData(FALSE);
}
if(UpperValue == "NOTEPAD")
{
system("Notepad.exe"); //記事本程序
m_Test_Edit = "";
UpdateData(FALSE);
}
4 添加三個按鈕的代碼
前兩個按鈕的功能是重新設置編輯框變量的值,其代碼是:
測試:
m_Test_Edit = "測試!在文本框中顯示信息";
UpdateData(FALSE);
清除:
m_Test_Edit = "";
UpdateData(FALSE);
EXIT:
OnOK();
至此,控件和代碼都設計完畢,“保存全部”後再“重建全部”,就生成可執行文件好運行了。
2.4 小結
本章學習了按鈕、編輯框和複選框三類控件。設置控件屬性用右鍵點擊控件。
在按鈕的設置中,屬性頁1設置ID和標題,另外“顯示”和“TAB”兩個選項按默認被選中。屬性頁2-Styles無須設置,屬性頁3-Extended styles設置按鈕的外觀,對EXIT按鈕選中Client,Static,Modal這三項,其他兩個默認全不選。
編輯框沒有標題,在一般頁上設置ID和是否顯示是否激活,在Styles頁上選擇是單行還是多行文本。Extended styles頁和按鈕的一樣設置外觀。
複選框除了ID和標題外沒有要設置的。
在本章中,我們還學到如何用按鈕和複選框來控制編輯框的方法,利用GetDlgItem(ID)函數得到控件對象的方法,還有用 system("*.exe")執行外部程序的方法。
——END——