對話框和常用控件_第1頁
對話框和常用控件_第2頁
對話框和常用控件_第3頁
對話框和常用控件_第4頁
對話框和常用控件_第5頁
已閱讀5頁,還剩49頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

對話框和常用控件本章內容

4.1對話框簡介

4.2對話框資源

4.3對話框程序設計方法4.4常用控件(自學)

4.5作業(yè)4.1對話框簡介

對話框是一種用戶界面,它為用戶提供了一種標準的處理數(shù)據(jù)的方法。因為大部分的對話框是作為對菜單的單擊響應而顯示出來的(在Word軟件中,單擊菜單項后有…的菜單,看都會出現(xiàn)哪些對話框),因此對話框常常被看作是用戶菜單命令的擴展。從程序員角度來看,對話框和控件都是窗口,查看MSDN中的MFC組織圖可以看到,它們都是從CWnd類派生來的,這正好說明了“對話框和控件都是窗口”。因此,對對話框的操作,經(jīng)常要使用窗口的成員函數(shù)來進行。4.1.1 對話框的分類

1.模態(tài)對話框在對話框關閉之前,用戶無法在應用程序的其它窗口中進行工作的對話框稱為模態(tài)對話框。例如Windows的各種應用軟件中的OpenFile對話框,用戶不能在應用程序的其它地方工作,直到對話框關閉。2.非模態(tài)對話框對話框保留在屏幕的同時,用戶還可以在應用程序其它窗口中進行工作的對話框稱為非模態(tài)對話框。例如,Word字處理軟件中的Find和Replace對話框就是非模態(tài)對話框的一個很好的例子。

4.1.2 對話框的組成

對話框模板對話框模板定義了對話框的特性(比如大小、位置和風格)以及對話框中每個控件的類型和位置。程序員不僅可以使用對話框資源編輯器建立對話框資源模板外,還可以根據(jù)需要在內存中創(chuàng)建對話框模板。當對話框模板創(chuàng)建后,程序員好可以在創(chuàng)建和管理對話框時動態(tài)地改變部分控件的信息,如禁止、變灰、改變標題和大小。對話框模板可以看作對話框應用程序的一種用戶接口,用戶在應用程序的使用中,看到的都是資源模板中的東西。

4.1.2 對話框的組成(續(xù))

對話框類

從CDialog類派生的對話框類提供編程接口來管理與對話框模板相關聯(lián)的對話框。CDialog類的許多成員函數(shù)與對話框編程密切相關,可供程序員調用。由于對話框是一種窗口,因此相應的對話框類必須與一個Windows窗口相聯(lián)系,而對話框資源模板就是用于創(chuàng)建這個Windows窗口及其包含在其中的控件。對話框類可以看作對話框應用程序的一種程序員接口,用戶對應用程序操作,后臺調用的都是該類的成員函數(shù)來完成的。6

4.1.3 對話框的實現(xiàn)過程使用對話框的一般過程:①添加對話框資源;②設置對話框的屬性;③添加和布局控件;④創(chuàng)建對話框類;⑤添加對話框代碼;⑥在程序中調用對話框。4.2對話框資源圖4.1Ex_SDI資源視圖資源類別資源標識符一個單文檔應用程序所使用的資源可分為下列幾類:(1)快捷鍵列表(Accelerator)。一系列組合鍵的集合,被應用程序用來引發(fā)一個動作。該列表一般與菜單命令相關聯(lián),用來代替鼠標操作。(2)對話框(Dialog)。含有按鈕、列表框、編輯框等各種控件的窗口。(3)圖標(Icon)。代表應用程序顯示在Windows桌面上的位圖,它同時有32x32像素和16x16像素兩種規(guī)格。(4)菜單(Menu)。用戶通過菜單可以完成應用程序的大部分操作。(5)字串表(StringTable)。應用程序使用的全局字符串或其他標識符。9(6)工具欄按鈕(Toolbar)。工具欄外觀是以一系列具有相同尺寸的位圖組成的,它通常與一些菜單命令相對應,用以提高用戶的工作效率。(7)版本信息(Version)。包含應用程序的版本、用戶注冊碼等相關信息。除了上述常用資源類別外,VisualC++6.0應用程序中還可有鼠標指針、HTML等,也可以自己添加新的資源類別。ID標識符一般地,要遵循下列規(guī)則:在標識符名稱中允許使用字母a~z、A~Z、0~9以及下劃線。標識符名稱不區(qū)分大小寫字母,如new_idd與New_Idd是相同的標識符。不能以數(shù)字開頭,如8BIT是不合法的標識符名。除了上述規(guī)則外,出于習慣,VisualC++還提供了一些常用的定義標識符名稱的前綴供使用、參考,見下表。11添加對話框資源對展開的不同類型的對話框資源不作任何選擇,選中“Dialog”,單擊[新建]按鈕,系統(tǒng)就會自動為當前應用程序添加了一個對話框資源,并出現(xiàn)如下圖所示的界面。添加對話框資源后的開發(fā)環(huán)境13對話框模板控件工具欄布局工具欄默認標識符一旦對話框資源被打開或被創(chuàng)建,就會出現(xiàn)對話框編輯器,通過它可以在對話框中進行控件的添加和布局等操作。控件的添加。對話框編輯器最初打開時,控件工具欄是隨之出現(xiàn)的,利用此工具欄中的各個按鈕可以順利完成控件的添加。下圖說明了各個按鈕所對應的控件類型。15控件的選擇靜態(tài)文本組框復選框組合框水平滾動條旋轉按鈕滑動條列表視圖標簽復合編輯月歷用戶定制控件靜態(tài)圖片編輯框按鈕單選框列表框垂直滾動條進展條熱鍵樹形視圖動畫日期選擇IP地址擴展組合框創(chuàng)建對話框類

MFC提供了一系列對話框類,并實現(xiàn)了對話框消息響應和處理機制。CDialog類是對話框類中最重要的類,我們在程序中創(chuàng)建的對話框類一般都是CDialog類的派生類。CDialog類還是其它所有對話框類的基類,其派生關系如下所示:

CObject CCmdTarget CWnd CDialog

17CDialog類從CWnd類派生而來,所以它繼承了CWnd類的成員函數(shù),具有CWnd類的基本功能,在你的CDialog類的派生類中可以直接調用CDialog類的成員函數(shù)。大部分的成員函數(shù)是虛函數(shù),可以在你的派生類中重載,以實現(xiàn)特定的目的。除了CDialog類成員函數(shù),類CWnd和CWinApp也提供了一些成員函數(shù)用于對話框的管理。

有關對話框的常用處理函數(shù)CDialog::CDialog()通過調用派生類構造函數(shù),根據(jù)對話框資源模板定義一個對話框。CDialog::DoModal()激活模態(tài)對話框,顯示對話框窗口。CDialog::Create()根據(jù)對話框資源模板創(chuàng)建非模態(tài)對話框窗口。如果對話框不是Visible屬性,還需通過調用CWnd::ShowWindow()函數(shù)顯示非模態(tài)對話框窗口。CDialog::OnOk()單擊OK按鈕時調用該函數(shù),接收對話框輸入數(shù)據(jù),關閉對話框。19CDialog::OnCancel()單擊Cancel按鈕或按Esc鍵時調用該函數(shù),不接收對話框輸入數(shù)據(jù),關閉對話框。CDialog::OnInitDialog()WM_INITDIALOG消息處理函數(shù),在調用DoModal或Create函數(shù)時系統(tǒng)發(fā)送WM_INITDIALOG消息,在顯示對話框前調用該函數(shù)進行初始化。CDialog::EndDialog()用于關閉模態(tài)對話框窗口。CWnd::ShowWindow()顯示或隱藏對話框窗口CWnd::DestroyWindow()關閉并銷毀非模態(tài)對話框CWnd::UpdateData()通過調用DoDataExchange()設置或獲取對話框控件的數(shù)據(jù),此函數(shù)只有一個BOOL參數(shù),當為TRUE時,將控件信息轉換為變量數(shù)據(jù);反之,將變量數(shù)據(jù)轉換為控件信息。CWnd::DoDataExchange()被UpdateData()調用以實現(xiàn)對話框數(shù)據(jù)交換,不能直接調用。

CWnd::GetWindowText()獲取對話框窗口的標題CWnd::SetWindowText()修改對話框窗口的標題CWnd::GetDlgItemText()獲取對話框中控件的文本內容CWnd::SetDlgItemText()設置對話框中控件的文本內容CWnd::GetDlgItem()獲取控件或子窗口的指針CWnd::MoveWindow()用于移動對話框窗口CWnd::EnableWindow()使窗口處于禁用或可用狀態(tài)26

4.3對話框程序設計方法例1:模式對話框設計在本例中,我們將制作一個簡單的對話框,它通過菜單命令彈出,當單擊菜單命令“彈出對話框”,應用程序彈出一名為“Dialog”對話框。注意:在模式對話框推出之前,程序不能繼續(xù)進行,必須等到對話框關閉。實現(xiàn)步驟:1、建立資源;2、創(chuàng)建類;3、實現(xiàn)消息映射,添加代碼;4、編譯運行。1、建立資源運行AppWizard建立一個單文檔應用程序創(chuàng)建對話框模板,單擊菜單命令“Insert/Resource”,選中“Dialog”,單擊“new”按鈕,可看到如下對話框模板。首先刪除“Cancel”按鈕,將“OK”按鈕拖放到中下方,之后添加一個“StaticText”控件,設置標題為“VC課程”。

設置對話框ID,鼠標右鍵單擊對話框,選擇“Properties”選項,在彈出的屬性對話框中,ID設置為IDD_MYDIALOG。28創(chuàng)建菜單命令:打開資源編輯器中的菜單項,添加自己的菜單命令,其ID值設置為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。結果如下例2文本控件應用本例通過鍵盤輸入信息顯示在菜單窗口。步驟:1、建立單文檔程序,建立對話框,修改其屬性2、建立菜單3、為新對話框建立新類4、建立消息映射、添加代碼;5、編譯運行1、建立單文檔程序,建立對話框,修改其屬性運行AppWizard創(chuàng)建一單文檔應用程序創(chuàng)建對話框模版將對話框“OK”按鈕的標題改為“Apply”,添加一個文本控件和一個靜態(tài)文本控件

設置文本控件ID,ID值為:IDC_MYEDIT設置對話框ID,鼠標右鍵單擊對話框,選擇“Properties”選項,在屬性對話框中ID設置為IDD_MYDIALOG。

2、建立菜單

打開資源編輯器中的菜單項,添加自己的菜單命令。3、為新對話框建立新類新對話框類屬性設置

4、建立消息映射、添加代碼在CMyDlg對話框類頭文件中添加一個公有成員變量CString m_String;//用于與對話框文本控件數(shù)據(jù)交換。//通過此字符變量獲取文本控件信息。在CMyDlg對話框類的構造函數(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的控件內容信息傳給m_String。在視圖類的頭文件中添加如下代碼:

#include“MyDlg.h”//將對話框類包含到視圖類中。classCMyMsgView:publicCView{protected://createfromserializationonly CMyMsgView(); DECLARE_DYNCREATE(CMyMsgView)//Attributespublic: CMyMsgDoc*GetDocument();

CMyDlgDlg;//創(chuàng)建對話框對象CStringstr;//此字符變量存儲對話框傳來的控件內容信息。//Operations添加菜單命令“ID_D

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論