




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
對(duì)話框和常用控件本章內(nèi)容
4.1對(duì)話框簡(jiǎn)介
4.2對(duì)話框資源
4.3對(duì)話框程序設(shè)計(jì)方法4.4常用控件(自學(xué))
4.5作業(yè)4.1對(duì)話框簡(jiǎn)介
對(duì)話框是一種用戶界面,它為用戶提供了一種標(biāo)準(zhǔn)的處理數(shù)據(jù)的方法。因?yàn)榇蟛糠值膶?duì)話框是作為對(duì)菜單的單擊響應(yīng)而顯示出來(lái)的(在Word軟件中,單擊菜單項(xiàng)后有…的菜單,看都會(huì)出現(xiàn)哪些對(duì)話框),因此對(duì)話框常常被看作是用戶菜單命令的擴(kuò)展。從程序員角度來(lái)看,對(duì)話框和控件都是窗口,查看MSDN中的MFC組織圖可以看到,它們都是從CWnd類(lèi)派生來(lái)的,這正好說(shuō)明了“對(duì)話框和控件都是窗口”。因此,對(duì)對(duì)話框的操作,經(jīng)常要使用窗口的成員函數(shù)來(lái)進(jìn)行。4.1.1 對(duì)話框的分類(lèi)
1.模態(tài)對(duì)話框在對(duì)話框關(guān)閉之前,用戶無(wú)法在應(yīng)用程序的其它窗口中進(jìn)行工作的對(duì)話框稱為模態(tài)對(duì)話框。例如Windows的各種應(yīng)用軟件中的OpenFile對(duì)話框,用戶不能在應(yīng)用程序的其它地方工作,直到對(duì)話框關(guān)閉。2.非模態(tài)對(duì)話框?qū)υ捒虮A粼谄聊坏耐瑫r(shí),用戶還可以在應(yīng)用程序其它窗口中進(jìn)行工作的對(duì)話框稱為非模態(tài)對(duì)話框。例如,Word字處理軟件中的Find和Replace對(duì)話框就是非模態(tài)對(duì)話框的一個(gè)很好的例子。
4.1.2 對(duì)話框的組成
對(duì)話框模板對(duì)話框模板定義了對(duì)話框的特性(比如大小、位置和風(fēng)格)以及對(duì)話框中每個(gè)控件的類(lèi)型和位置。程序員不僅可以使用對(duì)話框資源編輯器建立對(duì)話框資源模板外,還可以根據(jù)需要在內(nèi)存中創(chuàng)建對(duì)話框模板。當(dāng)對(duì)話框模板創(chuàng)建后,程序員好可以在創(chuàng)建和管理對(duì)話框時(shí)動(dòng)態(tài)地改變部分控件的信息,如禁止、變灰、改變標(biāo)題和大小。對(duì)話框模板可以看作對(duì)話框應(yīng)用程序的一種用戶接口,用戶在應(yīng)用程序的使用中,看到的都是資源模板中的東西。
4.1.2 對(duì)話框的組成(續(xù))
對(duì)話框類(lèi)
從CDialog類(lèi)派生的對(duì)話框類(lèi)提供編程接口來(lái)管理與對(duì)話框模板相關(guān)聯(lián)的對(duì)話框。CDialog類(lèi)的許多成員函數(shù)與對(duì)話框編程密切相關(guān),可供程序員調(diào)用。由于對(duì)話框是一種窗口,因此相應(yīng)的對(duì)話框類(lèi)必須與一個(gè)Windows窗口相聯(lián)系,而對(duì)話框資源模板就是用于創(chuàng)建這個(gè)Windows窗口及其包含在其中的控件。對(duì)話框類(lèi)可以看作對(duì)話框應(yīng)用程序的一種程序員接口,用戶對(duì)應(yīng)用程序操作,后臺(tái)調(diào)用的都是該類(lèi)的成員函數(shù)來(lái)完成的。6
4.1.3 對(duì)話框的實(shí)現(xiàn)過(guò)程使用對(duì)話框的一般過(guò)程:①添加對(duì)話框資源;②設(shè)置對(duì)話框的屬性;③添加和布局控件;④創(chuàng)建對(duì)話框類(lèi);⑤添加對(duì)話框代碼;⑥在程序中調(diào)用對(duì)話框。4.2對(duì)話框資源圖4.1Ex_SDI資源視圖資源類(lèi)別資源標(biāo)識(shí)符一個(gè)單文檔應(yīng)用程序所使用的資源可分為下列幾類(lèi):(1)快捷鍵列表(Accelerator)。一系列組合鍵的集合,被應(yīng)用程序用來(lái)引發(fā)一個(gè)動(dòng)作。該列表一般與菜單命令相關(guān)聯(lián),用來(lái)代替鼠標(biāo)操作。(2)對(duì)話框(Dialog)。含有按鈕、列表框、編輯框等各種控件的窗口。(3)圖標(biāo)(Icon)。代表應(yīng)用程序顯示在Windows桌面上的位圖,它同時(shí)有32x32像素和16x16像素兩種規(guī)格。(4)菜單(Menu)。用戶通過(guò)菜單可以完成應(yīng)用程序的大部分操作。(5)字串表(StringTable)。應(yīng)用程序使用的全局字符串或其他標(biāo)識(shí)符。9(6)工具欄按鈕(Toolbar)。工具欄外觀是以一系列具有相同尺寸的位圖組成的,它通常與一些菜單命令相對(duì)應(yīng),用以提高用戶的工作效率。(7)版本信息(Version)。包含應(yīng)用程序的版本、用戶注冊(cè)碼等相關(guān)信息。除了上述常用資源類(lèi)別外,VisualC++6.0應(yīng)用程序中還可有鼠標(biāo)指針、HTML等,也可以自己添加新的資源類(lèi)別。ID標(biāo)識(shí)符一般地,要遵循下列規(guī)則:在標(biāo)識(shí)符名稱中允許使用字母a~z、A~Z、0~9以及下劃線。標(biāo)識(shí)符名稱不區(qū)分大小寫(xiě)字母,如new_idd與New_Idd是相同的標(biāo)識(shí)符。不能以數(shù)字開(kāi)頭,如8BIT是不合法的標(biāo)識(shí)符名。除了上述規(guī)則外,出于習(xí)慣,VisualC++還提供了一些常用的定義標(biāo)識(shí)符名稱的前綴供使用、參考,見(jiàn)下表。11添加對(duì)話框資源對(duì)展開(kāi)的不同類(lèi)型的對(duì)話框資源不作任何選擇,選中“Dialog”,單擊[新建]按鈕,系統(tǒng)就會(huì)自動(dòng)為當(dāng)前應(yīng)用程序添加了一個(gè)對(duì)話框資源,并出現(xiàn)如下圖所示的界面。添加對(duì)話框資源后的開(kāi)發(fā)環(huán)境13對(duì)話框模板控件工具欄布局工具欄默認(rèn)標(biāo)識(shí)符一旦對(duì)話框資源被打開(kāi)或被創(chuàng)建,就會(huì)出現(xiàn)對(duì)話框編輯器,通過(guò)它可以在對(duì)話框中進(jìn)行控件的添加和布局等操作??丶奶砑印?duì)話框編輯器最初打開(kāi)時(shí),控件工具欄是隨之出現(xiàn)的,利用此工具欄中的各個(gè)按鈕可以順利完成控件的添加。下圖說(shuō)明了各個(gè)按鈕所對(duì)應(yīng)的控件類(lèi)型。15控件的選擇靜態(tài)文本組框復(fù)選框組合框水平滾動(dòng)條旋轉(zhuǎn)按鈕滑動(dòng)條列表視圖標(biāo)簽復(fù)合編輯月歷用戶定制控件靜態(tài)圖片編輯框按鈕單選框列表框垂直滾動(dòng)條進(jìn)展條熱鍵樹(shù)形視圖動(dòng)畫(huà)日期選擇IP地址擴(kuò)展組合框創(chuàng)建對(duì)話框類(lèi)
MFC提供了一系列對(duì)話框類(lèi),并實(shí)現(xiàn)了對(duì)話框消息響應(yīng)和處理機(jī)制。CDialog類(lèi)是對(duì)話框類(lèi)中最重要的類(lèi),我們?cè)诔绦蛑袆?chuàng)建的對(duì)話框類(lèi)一般都是CDialog類(lèi)的派生類(lèi)。CDialog類(lèi)還是其它所有對(duì)話框類(lèi)的基類(lèi),其派生關(guān)系如下所示:
CObject CCmdTarget CWnd CDialog
17CDialog類(lèi)從CWnd類(lèi)派生而來(lái),所以它繼承了CWnd類(lèi)的成員函數(shù),具有CWnd類(lèi)的基本功能,在你的CDialog類(lèi)的派生類(lèi)中可以直接調(diào)用CDialog類(lèi)的成員函數(shù)。大部分的成員函數(shù)是虛函數(shù),可以在你的派生類(lèi)中重載,以實(shí)現(xiàn)特定的目的。除了CDialog類(lèi)成員函數(shù),類(lèi)CWnd和CWinApp也提供了一些成員函數(shù)用于對(duì)話框的管理。
有關(guān)對(duì)話框的常用處理函數(shù)CDialog::CDialog()通過(guò)調(diào)用派生類(lèi)構(gòu)造函數(shù),根據(jù)對(duì)話框資源模板定義一個(gè)對(duì)話框。CDialog::DoModal()激活模態(tài)對(duì)話框,顯示對(duì)話框窗口。CDialog::Create()根據(jù)對(duì)話框資源模板創(chuàng)建非模態(tài)對(duì)話框窗口。如果對(duì)話框不是Visible屬性,還需通過(guò)調(diào)用CWnd::ShowWindow()函數(shù)顯示非模態(tài)對(duì)話框窗口。CDialog::OnOk()單擊OK按鈕時(shí)調(diào)用該函數(shù),接收對(duì)話框輸入數(shù)據(jù),關(guān)閉對(duì)話框。19CDialog::OnCancel()單擊Cancel按鈕或按Esc鍵時(shí)調(diào)用該函數(shù),不接收對(duì)話框輸入數(shù)據(jù),關(guān)閉對(duì)話框。CDialog::OnInitDialog()WM_INITDIALOG消息處理函數(shù),在調(diào)用DoModal或Create函數(shù)時(shí)系統(tǒng)發(fā)送WM_INITDIALOG消息,在顯示對(duì)話框前調(diào)用該函數(shù)進(jìn)行初始化。CDialog::EndDialog()用于關(guān)閉模態(tài)對(duì)話框窗口。CWnd::ShowWindow()顯示或隱藏對(duì)話框窗口CWnd::DestroyWindow()關(guān)閉并銷(xiāo)毀非模態(tài)對(duì)話框CWnd::UpdateData()通過(guò)調(diào)用DoDataExchange()設(shè)置或獲取對(duì)話框控件的數(shù)據(jù),此函數(shù)只有一個(gè)BOOL參數(shù),當(dāng)為T(mén)RUE時(shí),將控件信息轉(zhuǎn)換為變量數(shù)據(jù);反之,將變量數(shù)據(jù)轉(zhuǎn)換為控件信息。CWnd::DoDataExchange()被UpdateData()調(diào)用以實(shí)現(xiàn)對(duì)話框數(shù)據(jù)交換,不能直接調(diào)用。
CWnd::GetWindowText()獲取對(duì)話框窗口的標(biāo)題CWnd::SetWindowText()修改對(duì)話框窗口的標(biāo)題CWnd::GetDlgItemText()獲取對(duì)話框中控件的文本內(nèi)容CWnd::SetDlgItemText()設(shè)置對(duì)話框中控件的文本內(nèi)容CWnd::GetDlgItem()獲取控件或子窗口的指針CWnd::MoveWindow()用于移動(dòng)對(duì)話框窗口CWnd::EnableWindow()使窗口處于禁用或可用狀態(tài)26
4.3對(duì)話框程序設(shè)計(jì)方法例1:模式對(duì)話框設(shè)計(jì)在本例中,我們將制作一個(gè)簡(jiǎn)單的對(duì)話框,它通過(guò)菜單命令彈出,當(dāng)單擊菜單命令“彈出對(duì)話框”,應(yīng)用程序彈出一名為“Dialog”對(duì)話框。注意:在模式對(duì)話框推出之前,程序不能繼續(xù)進(jìn)行,必須等到對(duì)話框關(guān)閉。實(shí)現(xiàn)步驟:1、建立資源;2、創(chuàng)建類(lèi);3、實(shí)現(xiàn)消息映射,添加代碼;4、編譯運(yùn)行。1、建立資源運(yùn)行AppWizard建立一個(gè)單文檔應(yīng)用程序創(chuàng)建對(duì)話框模板,單擊菜單命令“Insert/Resource”,選中“Dialog”,單擊“new”按鈕,可看到如下對(duì)話框模板。首先刪除“Cancel”按鈕,將“OK”按鈕拖放到中下方,之后添加一個(gè)“StaticText”控件,設(shè)置標(biāo)題為“VC課程”。
設(shè)置對(duì)話框ID,鼠標(biāo)右鍵單擊對(duì)話框,選擇“Properties”選項(xiàng),在彈出的屬性對(duì)話框中,ID設(shè)置為IDD_MYDIALOG。28創(chuàng)建菜單命令:打開(kāi)資源編輯器中的菜單項(xiàng),添加自己的菜單命令,其ID值設(shè)置為ID_PUPDIALOG
2、創(chuàng)建類(lèi)創(chuàng)建基于新對(duì)話框的類(lèi),可雙擊新建的對(duì)話框,它將彈出下面菜單單擊“ok”按鈕,在下一個(gè)出現(xiàn)的對(duì)話框中添加新建的類(lèi)名,選擇基類(lèi)和對(duì)話框ID,在Name選項(xiàng)中填入“CMyDlg”,在“Baseclass”選項(xiàng)中選擇“CDialog”作為該類(lèi)的基類(lèi)。3、實(shí)現(xiàn)消息映射,添加代碼
選擇類(lèi)名CMainFrame(管理菜單),選擇ID:ID_PUPDIALOG,在Message中選擇COMMAND,通過(guò)ADDFUNCTION建立菜單項(xiàng)“彈出對(duì)話框”的消息映射。在函數(shù)中添加如下代碼:在MainFrm.cpp文件中添加如下代碼:#include“MyDlg.h”4、編譯運(yùn)行,單擊build/Execute*.exe。結(jié)果如下例2文本控件應(yīng)用本例通過(guò)鍵盤(pán)輸入信息顯示在菜單窗口。步驟:1、建立單文檔程序,建立對(duì)話框,修改其屬性2、建立菜單3、為新對(duì)話框建立新類(lèi)4、建立消息映射、添加代碼;5、編譯運(yùn)行1、建立單文檔程序,建立對(duì)話框,修改其屬性運(yùn)行AppWizard創(chuàng)建一單文檔應(yīng)用程序創(chuàng)建對(duì)話框模版將對(duì)話框“OK”按鈕的標(biāo)題改為“Apply”,添加一個(gè)文本控件和一個(gè)靜態(tài)文本控件
設(shè)置文本控件ID,ID值為:IDC_MYEDIT設(shè)置對(duì)話框ID,鼠標(biāo)右鍵單擊對(duì)話框,選擇“Properties”選項(xiàng),在屬性對(duì)話框中ID設(shè)置為IDD_MYDIALOG。
2、建立菜單
打開(kāi)資源編輯器中的菜單項(xiàng),添加自己的菜單命令。3、為新對(duì)話框建立新類(lèi)新對(duì)話框類(lèi)屬性設(shè)置
4、建立消息映射、添加代碼在CMyDlg對(duì)話框類(lèi)頭文件中添加一個(gè)公有成員變量CString m_String;//用于與對(duì)話框文本控件數(shù)據(jù)交換。//通過(guò)此字符變量獲取文本控件信息。在CMyDlg對(duì)話框類(lèi)的構(gòu)造函數(shù)對(duì)此變量進(jìn)行初始化。CMyDlg::CMyDlg(CWnd*pParent/*=NULL*/) :CDialog(CMyDlg::IDD,pParent){ //{{AFX_DATA_INIT(CMyDlg)//NOTE:theClassWizardwilladdmemberinitializationhere
m_String=_T(""); //}}AFX_DATA_INIT}在CMyDlg對(duì)話框類(lèi)的DoDataExchange函數(shù)中添加動(dòng)態(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。在視圖類(lèi)的頭文件中添加如下代碼:
#include“MyDlg.h”//將對(duì)話框類(lèi)包含到視圖類(lèi)中。classCMyMsgView:publicCView{protected://createfromserializationonly CMyMsgView(); DECLARE_DYNCREATE(CMyMsgView)//Attributespublic: CMyMsgDoc*GetDocument();
CMyDlgDlg;//創(chuàng)建對(duì)話框?qū)ο驝Stringstr;//此字符變量存儲(chǔ)對(duì)話框傳來(lái)的控件內(nèi)容信息。//Operations添加菜單命令“ID_D
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 具有振震雙控功能的模塊化層并聯(lián)橡膠支座及組合隔振(震)層研究
- 管理與護(hù)理管理學(xué)
- 倉(cāng)庫(kù)人員安全意識(shí)提升方案
- 保護(hù)牙齒健康教案說(shuō)課
- 腎挫傷患者的常規(guī)護(hù)理
- 超聲波泵技術(shù)解析與應(yīng)用
- 師德警示教育案例解析與應(yīng)用
- 《智能網(wǎng)聯(lián)汽車(chē)技術(shù)》課件-智能網(wǎng)聯(lián)汽車(chē)發(fā)展目標(biāo)的認(rèn)知
- 預(yù)防職業(yè)病危害課件
- 小學(xué)教師常規(guī)培訓(xùn)
- 實(shí)驗(yàn)室培育鉆石行業(yè)技術(shù)發(fā)展趨勢(shì)報(bào)告
- 2025年領(lǐng)英大制造行業(yè)人才全球化報(bào)告-馬來(lái)西亞篇
- 專題:閱讀理解 30篇 中考英語(yǔ)高分提升之新題速遞第二輯【含答案+解析】
- 企業(yè)面試題目和答案大全
- 抖音房產(chǎn)直播課件
- 2025至2030中國(guó)近視眼治療儀市場(chǎng)競(jìng)爭(zhēng)力剖析及企業(yè)經(jīng)營(yíng)形勢(shì)分析報(bào)告
- 2025年高考化學(xué)試卷(廣東卷)(空白卷)
- 體育老師招聘試題及答案
- 自然生態(tài)探險(xiǎn)之旅行業(yè)跨境出海項(xiàng)目商業(yè)計(jì)劃書(shū)
- 2025年北京市高考英語(yǔ)試卷真題(含答案解析)
- 西藏自治區(qū)拉薩市達(dá)孜區(qū)孜縣2025年七下英語(yǔ)期中質(zhì)量檢測(cè)模擬試題含答案
評(píng)論
0/150
提交評(píng)論