




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
對話框和常用控件本章內(nèi)容
4.1對話框簡介
4.2對話框資源
4.3對話框程序設(shè)計方法4.4常用控件(自學(xué))
4.5作業(yè)4.1對話框簡介
對話框是一種用戶界面,它為用戶提供了一種標(biāo)準(zhǔn)的處理數(shù)據(jù)的方法。因為大部分的對話框是作為對菜單的單擊響應(yīng)而顯示出來的(在Word軟件中,單擊菜單項后有…的菜單,看都會出現(xiàn)哪些對話框),因此對話框常常被看作是用戶菜單命令的擴展。從程序員角度來看,對話框和控件都是窗口,查看MSDN中的MFC組織圖可以看到,它們都是從CWnd類派生來的,這正好說明了“對話框和控件都是窗口”。因此,對對話框的操作,經(jīng)常要使用窗口的成員函數(shù)來進行。4.1.1 對話框的分類
1.模態(tài)對話框在對話框關(guān)閉之前,用戶無法在應(yīng)用程序的其它窗口中進行工作的對話框稱為模態(tài)對話框。例如Windows的各種應(yīng)用軟件中的OpenFile對話框,用戶不能在應(yīng)用程序的其它地方工作,直到對話框關(guān)閉。2.非模態(tài)對話框?qū)υ捒虮A粼谄聊坏耐瑫r,用戶還可以在應(yīng)用程序其它窗口中進行工作的對話框稱為非模態(tài)對話框。例如,Word字處理軟件中的Find和Replace對話框就是非模態(tài)對話框的一個很好的例子。
4.1.2 對話框的組成
對話框模板對話框模板定義了對話框的特性(比如大小、位置和風(fēng)格)以及對話框中每個控件的類型和位置。程序員不僅可以使用對話框資源編輯器建立對話框資源模板外,還可以根據(jù)需要在內(nèi)存中創(chuàng)建對話框模板。當(dāng)對話框模板創(chuàng)建后,程序員好可以在創(chuàng)建和管理對話框時動態(tài)地改變部分控件的信息,如禁止、變灰、改變標(biāo)題和大小。對話框模板可以看作對話框應(yīng)用程序的一種用戶接口,用戶在應(yīng)用程序的使用中,看到的都是資源模板中的東西。
4.1.2 對話框的組成(續(xù))
對話框類
從CDialog類派生的對話框類提供編程接口來管理與對話框模板相關(guān)聯(lián)的對話框。CDialog類的許多成員函數(shù)與對話框編程密切相關(guān),可供程序員調(diào)用。由于對話框是一種窗口,因此相應(yīng)的對話框類必須與一個Windows窗口相聯(lián)系,而對話框資源模板就是用于創(chuàng)建這個Windows窗口及其包含在其中的控件。對話框類可以看作對話框應(yīng)用程序的一種程序員接口,用戶對應(yīng)用程序操作,后臺調(diào)用的都是該類的成員函數(shù)來完成的。6
4.1.3 對話框的實現(xiàn)過程使用對話框的一般過程:①添加對話框資源;②設(shè)置對話框的屬性;③添加和布局控件;④創(chuàng)建對話框類;⑤添加對話框代碼;⑥在程序中調(diào)用對話框。4.2對話框資源圖4.1Ex_SDI資源視圖資源類別資源標(biāo)識符一個單文檔應(yīng)用程序所使用的資源可分為下列幾類:(1)快捷鍵列表(Accelerator)。一系列組合鍵的集合,被應(yīng)用程序用來引發(fā)一個動作。該列表一般與菜單命令相關(guān)聯(lián),用來代替鼠標(biāo)操作。(2)對話框(Dialog)。含有按鈕、列表框、編輯框等各種控件的窗口。(3)圖標(biāo)(Icon)。代表應(yīng)用程序顯示在Windows桌面上的位圖,它同時有32x32像素和16x16像素兩種規(guī)格。(4)菜單(Menu)。用戶通過菜單可以完成應(yīng)用程序的大部分操作。(5)字串表(StringTable)。應(yīng)用程序使用的全局字符串或其他標(biāo)識符。9(6)工具欄按鈕(Toolbar)。工具欄外觀是以一系列具有相同尺寸的位圖組成的,它通常與一些菜單命令相對應(yīng),用以提高用戶的工作效率。(7)版本信息(Version)。包含應(yīng)用程序的版本、用戶注冊碼等相關(guān)信息。除了上述常用資源類別外,VisualC++6.0應(yīng)用程序中還可有鼠標(biāo)指針、HTML等,也可以自己添加新的資源類別。ID標(biāo)識符一般地,要遵循下列規(guī)則:在標(biāo)識符名稱中允許使用字母a~z、A~Z、0~9以及下劃線。標(biāo)識符名稱不區(qū)分大小寫字母,如new_idd與New_Idd是相同的標(biāo)識符。不能以數(shù)字開頭,如8BIT是不合法的標(biāo)識符名。除了上述規(guī)則外,出于習(xí)慣,VisualC++還提供了一些常用的定義標(biāo)識符名稱的前綴供使用、參考,見下表。11添加對話框資源對展開的不同類型的對話框資源不作任何選擇,選中“Dialog”,單擊[新建]按鈕,系統(tǒng)就會自動為當(dāng)前應(yīng)用程序添加了一個對話框資源,并出現(xiàn)如下圖所示的界面。添加對話框資源后的開發(fā)環(huán)境13對話框模板控件工具欄布局工具欄默認(rèn)標(biāo)識符一旦對話框資源被打開或被創(chuàng)建,就會出現(xiàn)對話框編輯器,通過它可以在對話框中進行控件的添加和布局等操作。控件的添加。對話框編輯器最初打開時,控件工具欄是隨之出現(xiàn)的,利用此工具欄中的各個按鈕可以順利完成控件的添加。下圖說明了各個按鈕所對應(yīng)的控件類型。15控件的選擇靜態(tài)文本組框復(fù)選框組合框水平滾動條旋轉(zhuǎn)按鈕滑動條列表視圖標(biāo)簽復(fù)合編輯月歷用戶定制控件靜態(tài)圖片編輯框按鈕單選框列表框垂直滾動條進展條熱鍵樹形視圖動畫日期選擇IP地址擴展組合框創(chuàng)建對話框類
MFC提供了一系列對話框類,并實現(xiàn)了對話框消息響應(yīng)和處理機制。CDialog類是對話框類中最重要的類,我們在程序中創(chuàng)建的對話框類一般都是CDialog類的派生類。CDialog類還是其它所有對話框類的基類,其派生關(guān)系如下所示:
CObject CCmdTarget CWnd CDialog
17CDialog類從CWnd類派生而來,所以它繼承了CWnd類的成員函數(shù),具有CWnd類的基本功能,在你的CDialog類的派生類中可以直接調(diào)用CDialog類的成員函數(shù)。大部分的成員函數(shù)是虛函數(shù),可以在你的派生類中重載,以實現(xiàn)特定的目的。除了CDialog類成員函數(shù),類CWnd和CWinApp也提供了一些成員函數(shù)用于對話框的管理。
有關(guān)對話框的常用處理函數(shù)CDialog::CDialog()通過調(diào)用派生類構(gòu)造函數(shù),根據(jù)對話框資源模板定義一個對話框。CDialog::DoModal()激活模態(tài)對話框,顯示對話框窗口。CDialog::Create()根據(jù)對話框資源模板創(chuàng)建非模態(tài)對話框窗口。如果對話框不是Visible屬性,還需通過調(diào)用CWnd::ShowWindow()函數(shù)顯示非模態(tài)對話框窗口。CDialog::OnOk()單擊OK按鈕時調(diào)用該函數(shù),接收對話框輸入數(shù)據(jù),關(guān)閉對話框。19CDialog::OnCancel()單擊Cancel按鈕或按Esc鍵時調(diào)用該函數(shù),不接收對話框輸入數(shù)據(jù),關(guān)閉對話框。CDialog::OnInitDialog()WM_INITDIALOG消息處理函數(shù),在調(diào)用DoModal或Create函數(shù)時系統(tǒng)發(fā)送WM_INITDIALOG消息,在顯示對話框前調(diào)用該函數(shù)進行初始化。CDialog::EndDialog()用于關(guān)閉模態(tài)對話框窗口。CWnd::ShowWindow()顯示或隱藏對話框窗口CWnd::DestroyWindow()關(guān)閉并銷毀非模態(tài)對話框CWnd::UpdateData()通過調(diào)用DoDataExchange()設(shè)置或獲取對話框控件的數(shù)據(jù),此函數(shù)只有一個BOOL參數(shù),當(dāng)為TRUE時,將控件信息轉(zhuǎn)換為變量數(shù)據(jù);反之,將變量數(shù)據(jù)轉(zhuǎn)換為控件信息。CWnd::DoDataExchange()被UpdateData()調(diào)用以實現(xiàn)對話框數(shù)據(jù)交換,不能直接調(diào)用。
CWnd::GetWindowText()獲取對話框窗口的標(biāo)題CWnd::SetWindowText()修改對話框窗口的標(biāo)題CWnd::GetDlgItemText()獲取對話框中控件的文本內(nèi)容CWnd::SetDlgItemText()設(shè)置對話框中控件的文本內(nèi)容CWnd::GetDlgItem()獲取控件或子窗口的指針CWnd::MoveWindow()用于移動對話框窗口CWnd::EnableWindow()使窗口處于禁用或可用狀態(tài)26
4.3對話框程序設(shè)計方法例1:模式對話框設(shè)計在本例中,我們將制作一個簡單的對話框,它通過菜單命令彈出,當(dāng)單擊菜單命令“彈出對話框”,應(yīng)用程序彈出一名為“Dialog”對話框。注意:在模式對話框推出之前,程序不能繼續(xù)進行,必須等到對話框關(guān)閉。實現(xiàn)步驟:1、建立資源;2、創(chuàng)建類;3、實現(xiàn)消息映射,添加代碼;4、編譯運行。1、建立資源運行AppWizard建立一個單文檔應(yīng)用程序創(chuàng)建對話框模板,單擊菜單命令“Insert/Resource”,選中“Dialog”,單擊“new”按鈕,可看到如下對話框模板。首先刪除“Cancel”按鈕,將“OK”按鈕拖放到中下方,之后添加一個“StaticText”控件,設(shè)置標(biāo)題為“VC課程”。
設(shè)置對話框ID,鼠標(biāo)右鍵單擊對話框,選擇“Properties”選項,在彈出的屬性對話框中,ID設(shè)置為IDD_MYDIALOG。28創(chuàng)建菜單命令:打開資源編輯器中的菜單項,添加自己的菜單命令,其ID值設(shè)置為ID_PUPDIALOG
2、創(chuàng)建類創(chuàng)建基于新對話框的類,可雙擊新建的對話框,它將彈出下面菜單單擊“ok”按鈕,在下一個出現(xiàn)的對話框中添加新建的類名,選擇基類和對話框ID,在Name選項中填入“CMyDlg”,在“Baseclass”選項中選擇“CDialog”作為該類的基類。3、實現(xiàn)消息映射,添加代碼
選擇類名CMainFrame(管理菜單),選擇ID:ID_PUPDIALOG,在Message中選擇COMMAND,通過ADDFUNCTION建立菜單項“彈出對話框”的消息映射。在函數(shù)中添加如下代碼:在MainFrm.cpp文件中添加如下代碼:#include“MyDlg.h”4、編譯運行,單擊build/Execute*.exe。結(jié)果如下例2文本控件應(yīng)用本例通過鍵盤輸入信息顯示在菜單窗口。步驟:1、建立單文檔程序,建立對話框,修改其屬性2、建立菜單3、為新對話框建立新類4、建立消息映射、添加代碼;5、編譯運行1、建立單文檔程序,建立對話框,修改其屬性運行AppWizard創(chuàng)建一單文檔應(yīng)用程序創(chuàng)建對話框模版將對話框“OK”按鈕的標(biāo)題改為“Apply”,添加一個文本控件和一個靜態(tài)文本控件
設(shè)置文本控件ID,ID值為:IDC_MYEDIT設(shè)置對話框ID,鼠標(biāo)右鍵單擊對話框,選擇“Properties”選項,在屬性對話框中ID設(shè)置為IDD_MYDIALOG。
2、建立菜單
打開資源編輯器中的菜單項,添加自己的菜單命令。3、為新對話框建立新類新對話框類屬性設(shè)置
4、建立消息映射、添加代碼在CMyDlg對話框類頭文件中添加一個公有成員變量CString m_String;//用于與對話框文本控件數(shù)據(jù)交換。//通過此字符變量獲取文本控件信息。在CMyDlg對話框類的構(gòu)造函數(shù)對此變量進行初始化。CMyDlg::CMyDlg(CWnd*pParent/*=NULL*/) :CDialog(CMyDlg::IDD,pParent){ //{{AFX_DATA_INIT(CMyDlg)//NOTE:theClassWizardwilladdmemberinitializationhere
m_String=_T(""); //}}AFX_DATA_INIT}在CMyDlg對話框類的DoDataExchange函數(shù)中添加動態(tài)數(shù)據(jù)映射函數(shù)voidCMyDlg::DoDataExchange(CDataExchange*pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CMyDlg) //NOTE:theClassWizardwilladdDDXandDDVcallshere
DDX_Text(pDX,IDC_MYEDIT,m_String); //}}AFX_DATA_MAP}此函數(shù)將ID為IDC_MYEDIT的控件內(nèi)容信息傳給m_String。在視圖類的頭文件中添加如下代碼:
#include“MyDlg.h”//將對話框類包含到視圖類中。classCMyMsgView:publicCView{protected://createfromserializationonly CMyMsgView(); DECLARE_DYNCREATE(CMyMsgView)//Attributespublic: CMyMsgDoc*GetDocument();
CMyDlgDlg;//創(chuàng)建對話框?qū)ο驝Stringstr;//此字符變量存儲對話框傳來的控件內(nèi)容信息。//Operations添加菜單命令“ID_D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 本科畢業(yè)答辯模版
- 2022年浙江省溫州市初中畢業(yè)升學(xué)考試科學(xué)模擬檢測試題(含答案)
- 2024年助理廣告師復(fù)習(xí)計劃制定技巧試題及答案
- 2024助理廣告師考試備考心理調(diào)整試題及答案
- 國際商業(yè)設(shè)計師視覺藝術(shù)表達試題及答案
- 影響0度探頭探傷的因素
- 初中AI面試題及答案
- 2024年紡織品現(xiàn)代檢測技術(shù)題及答案
- 衛(wèi)生教育課件
- 減稅降費競賽試題及答案
- 2024年江西省氣象部門招聘考試真題
- 2025-2030中國生物計算市場研發(fā)創(chuàng)新及發(fā)展前景趨勢預(yù)測研究報告
- 2025年一年級分批入隊闖關(guān)活動
- (二模)2025年深圳市高三年級第二次調(diào)研考試歷史試卷(含標(biāo)準(zhǔn)答案)
- 曳引式電梯知識培訓(xùn)課件
- 中國南水北調(diào)集團水網(wǎng)發(fā)展研究有限公司招聘筆試題庫2025
- 貴港輔警考試題庫2024
- 閩教版新課標(biāo)三年級信息技術(shù)教案下冊
- 2025年山東省淄博市張店區(qū)中考一模歷史試題(含答案)
- 2025年內(nèi)蒙古中考一模英語試題(原卷版+解析版)
- 高中生女生性教育
評論
0/150
提交評論