《visual-c++程序設計教程》第四章對話框設計和windows常用控件_第1頁
《visual-c++程序設計教程》第四章對話框設計和windows常用控件_第2頁
《visual-c++程序設計教程》第四章對話框設計和windows常用控件_第3頁
《visual-c++程序設計教程》第四章對話框設計和windows常用控件_第4頁
《visual-c++程序設計教程》第四章對話框設計和windows常用控件_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章對話框設計和Windows常用控件,4.1對話框應用程序介紹,1.對話框組成對話框主要由以下兩部分組成:(1)對話框資源:定義了對話框的特性(如大小、位置和風格等)以及對話框中每個控件的類型、位置等屬性。一般情況下,對話框資源在資源編輯器中靜態(tài)地定義,也可以用編程的方法在程序運行時動態(tài)地創(chuàng)建。(2)對話框類:對話框類是與對話框資源相關聯(lián)的,基于CDialog類的派生類,它提供編程接口來管理對話框。,2.對話框分類對話框的分類主要有以下兩種:模式(Model)對話框和非模式(Modeless)對話框。對于模式對話框,在對話框關閉之前,用戶無法在同一應用程序的其他地方進行工作,如Micros

2、oftWord中的“打開文件”對話框。而對于非模式對話框,在它仍然保留在屏幕上的同時,用戶可以在同一應用程序的其他窗口中進行工作,如MicrosoftWord中的“查找與替換”對話框,在對話框保留在屏幕的同時,還可以進行光標的重定位及其他操作。,4.2創(chuàng)建對話框程序,在VisualC+6.0中創(chuàng)建對話框應用程序一般分為4個步驟:(1)利用資源編輯器創(chuàng)建一個對話框模板,加入需要的控件并設置對話框和控件的屬性。(2)利用ClassWizard創(chuàng)建與對話框資源對應的CDialog的派生類。(3)編寫創(chuàng)建對話框的代碼,通常在響應某個菜單項或者工具欄按鈕時彈出對話框。(4)為對話框的控件添加響應的消息處

3、理。,4.2.1建立對話框程序框架,在MFC應用程序中添加對話框資源,通常按下列步驟進行:(1)利用MFCAppWizard向?qū)蓡挝臋n(SDI)應用程序DialogTest。選擇“插入”“資源”命令,或使用Ctrl+R組合鍵打開“插入資源”對話框。展開資源列表中的“Dialog”項,如圖4-1所示,“資源類型”列表中列出了各種類型的對話框資源。,(2)單擊“新建”按鈕可以創(chuàng)建一個資源類型列表中指定類型的新資源;單擊“定制”按鈕可以創(chuàng)建資源類型列表中沒有的新類型的資源;單擊“導入”按鈕可以將外部已有的位圖、圖標等資源添加到當前應用程序中。(3)修改對話框?qū)傩浴T趯υ捒蚰0宓目瞻滋幱覔?,從彈?/p>

4、的快捷菜單中選擇“屬性”命令,彈出如圖4-3的“對話屬性”對話框。,對話框的屬性有“常規(guī)”、“樣式”、“更多樣式”、“擴展樣式”和“更多擴展樣式”5個部分,這里只介紹最常用的“常規(guī)”屬性,其中各個屬性說明如表4-2所示。根據(jù)需要設置各項屬性即可。,4.2.2創(chuàng)建對話框類,在創(chuàng)建了對話框模板后,就可以利用ClassWizard來創(chuàng)建從CDialog派生且連接到對話框模板的對話框類了,并可以添加與控件相關聯(lián)的成員變量。需要注意的是,無論在創(chuàng)建對話框類之前還是之后,都可以向?qū)υ捒蛸Y源添加控件,但只有在創(chuàng)建對話框類之后,才可以為對話框添加與控件關聯(lián)的成員變量和消息處理函數(shù)。,4.2.3了解對話框常用函

5、數(shù),CDialog類是對話框的基類,用戶在程序中創(chuàng)建的對話框類一般都是CDialog類的派生類。CDialog類從CWnd類派生而來,所以它繼承了CWnd類的成員函數(shù),用戶在編寫對話框程序時除了使用CDialog類的成員函數(shù)之外,還可以調(diào)用CWnd類的一些成員函數(shù)進行對話框的管理。對話框常用的成員函數(shù)主要有以下幾個:,1.DoModal該方法用于創(chuàng)建并顯示一個模式對話框,其原型如下:virtualintDoModal();返回值:該方法返回一個整數(shù)值,該數(shù)值可以應用于EndDialog方法。如果返回值為-1,則表示沒有創(chuàng)建對話框;如果為IDABORT,則表示有其他錯誤發(fā)生。2.Create該方

6、法從對話框模板中創(chuàng)建一個對話框資源,其原型如下:BOOLCreate(LPCTSTRlpszTemplateName,CWnd*pParentWnd=NULL);BOOLCreate(UINTnIDTemplate,CWnd*pParentWnd=NULL);3.EndDialog該函數(shù)用于退出一個模式對話框,返回nResult作為DoModal的返回值,其原型如下:voidEndDialog(intnResult);,4.OnCancel該函數(shù)在單擊對話框中的“Cancel”按鈕或按Esc鍵時由框架調(diào)用,其原型如下:virtualvoidOnCancel();5.OnInitDialog該重

7、載函數(shù)用于響應WM_INTTDIALOG消息,對對話框進行初始化處理,其原型如下:virtualBOOLOnInitDialog();返回值:返回非零值,輸入焦點為第一個控件。若程序已顯式地設置焦點到某個控件處,則返回零。6.OnOK單擊ID為IDOK的按鈕時調(diào)用的函數(shù),關閉對話框,并返回IDOK,其原型如下:virtualvoidOnOK();,4.3使用Windows常用控件,為了與用戶進行直觀、方便、快捷的交互,Windows操作系統(tǒng)提供了各種控件??丶?Control)是一種子窗口,應用程序用它來與其他窗口進行簡單的交互。一般情況下,在使用對話框的時候都需要加上對話框控件,如編輯框、組

8、合框、按鈕和單選按鈕等。,4.3.1Windows常用控件介紹,1.靜態(tài)文本控件(CStatic)靜態(tài)文本控件用來在屏幕上顯示字符串,一般不響應消息,在運行過程中不和用戶發(fā)生任何關系。當把矩形范圍定位好之后,就可以直接輸入文本。該控件的一個常用屬性是標題(Caption)屬性,用來設置在控件中顯示的文本。在很多情況下,對話框中的一些說明性質(zhì)的文字均可以用靜態(tài)文本進行輸出。管理靜態(tài)文本控件的MFC類是CStatic類。,2.編輯框控件(CEdit)編輯框控件是一個讓用戶從鍵盤輸入和編輯文字的矩形窗口。同時,用戶也可以使用編輯框控件來編輯或修改簡單的文本文件。編輯框一般和靜態(tài)文本控件一起使用,當它

9、獲得焦點時,框內(nèi)會出現(xiàn)一個閃動的插入符。3.按鈕控件(CEdit)在Windows中按鈕是隨處可見的,其中常見的按鈕有3種類型:按鍵按鈕、單選按鈕和復選框。按鍵按鈕通常可以立即產(chǎn)生某個動作,執(zhí)行某個命令,因此也常被稱為命令按鈕。單選按鈕的外觀是一個圓圈,當它被選中時,單選按鈕中就標上一個黑點。復選框的外觀是一個空心方框,當它被選中時,復選框中就加上一個對勾標記,通常復選框只有選中和沒有選中兩種狀態(tài)。,4.列表框控件(CListBox)列表框是一種輸入控制,它可以使用戶從所列的表項中進行選擇。用戶可以在其中選擇一個或多個項,這與單選按鈕和復選框的功能有些相近,但不同的是,列表框中項的數(shù)目是靈活變

10、化的,程序運行時可往列表框中添加或刪除某些項。并且,當列表框中項的數(shù)目較多不能一次全部顯示時,還可以通過滾動條來拓展顯示范圍。,5.組合框控件組合框是列表框和編輯框的組合。在組合框中,用戶除了可以在列表中對已經(jīng)存在的選項進行選擇外,還可以輸入新的選項。Windows提供了3種類型的組合框:簡單組合框(Simple)、下拉式組合框(Dropdown)和下拉式列表框(DropList)。簡單組合框和下拉式組合框都含有列表框和編輯框控件,只不過簡單組合框的列表框不是下拉式的,跟正常的列表框一樣。下拉式列表框則雖然有下拉式的列表,但卻沒有文字編輯功能。,6.滾動條控件滾動條是窗口中常見的對象,當窗口客

11、戶區(qū)中要顯示比其自身大的對象時,滾動條便非常有用了。這種滾動條與窗口一同創(chuàng)建,位于窗口用戶區(qū)旁的非用戶區(qū),用來擴展用戶區(qū)的顯示范圍,它被稱為標準滾動條。另外,還有一種作為控件的滾動條,這是一個獨立的窗口,具有直接的輸入焦點,使用這種滾動條的目的未必是滾動顯示窗口內(nèi)容。,4.3.2添加Windows控件,控件的創(chuàng)建方法有兩種,一種是在對話框中指定控件,即將控件的父窗口指定為對話框,當程序啟動該對話框時,Windows系統(tǒng)自動為對話框創(chuàng)建控件,當關閉對話框時,Windows所創(chuàng)建的控件也隨之被撤銷。另一種是將控件看作是任意窗口的子窗口,通過調(diào)用相應的創(chuàng)建函數(shù)來實現(xiàn)。,1.通過資源編輯器添加控件打開

12、對話框資源編輯器彈出如圖48所示的控件工具欄之后,就可以方便地在對話框中添加各種控件了。(1)單擊添加:在控件工具欄上單擊要添加的控件后,將鼠標移動到對話框模板上,此時鼠標光標變成了“+”形狀,在對話框上再次單擊鼠標,控件就添加到對話框模板上了。(2)拖動添加:拖動要添加的控件到對話框模板上,然后釋放鼠標,也可以添加控件。,2.調(diào)用創(chuàng)建函數(shù)添加控件如果希望在程序的運行過程中在對話框中添加控件,一般需要先聲明一個MFC控件類的對象,然后調(diào)用Create()函數(shù)和其他成員函數(shù)顯示控件和設置屬性。Create()是CWnd的成員函數(shù),其原型如下:virtualBOOLCreate(LPCTSTRlp

13、szClassName,LPCTSTRlpszWindowName,DWORDdwStyle,ConstRECT,4.3.3修改Windows控件屬性,1.控件ID每個控件都有一個ID標識,系統(tǒng)給添加的每個控件指定了一個默認的ID標識,用戶可以根據(jù)需要對其進行修改,以便更清楚地表達出控件的作用。控件ID以IDC_開頭,命名ID時最好包括控件類型,例如,IDC_BUTTON前綴用于按鈕,IDC_EDIT前綴用于編輯框。ID可以由字母、數(shù)字及下劃線字符組成,且必須以字母或下劃線字符開頭。MFC約定ID中的字母全部大寫。,2.標題屬性靜態(tài)文本、組框、命令按鈕以及單選按鈕等控件都可以顯示標題,用來對控

14、件進行文字說明??丶祟}中的字符“上述代碼中首先定義了一個對話框?qū)ο骴lg,然后調(diào)用DoModal()函數(shù)以產(chǎn)生一個模式對話框。需要注意的是,由于視類中并不知道這個CTestDlg對話框是什么樣的數(shù)據(jù)類型,因此應該在視類的源文件中包含這個CTestDlg類的頭文件,即在視類的源文件中加入如下語句:#includetestdlg.h,4.5.3創(chuàng)建非模式對話框程序,相對于模式對話框,創(chuàng)建非模式對話框相對復雜,需要調(diào)用Create()和ShowWindow()函數(shù)。Create()函數(shù)具有以下兩種形式的聲明:BOOLCDialog:Create(LPCTSTRlpszTemplateName,CW

15、nd*pParent=NULL);BOOLCDialog:Create(UINTnIDTemplate,CWnd*pParentWnd=NULL);,利用Create()函數(shù)創(chuàng)建非模態(tài)對話框后,還需要調(diào)用ShowWindow()函數(shù)將這個對話框顯示出來,其函數(shù)原型如下:BOOLCDialog:ShowWindow(SW_SHOW);,如果要銷毀對話框?qū)ο螅梢酝ㄟ^以下兩種方法實現(xiàn):(1)在對話框退出時銷毀對象。重載OnOK與OnCancel函數(shù),在函數(shù)中調(diào)用父類的同名函數(shù),然后調(diào)用DestroyWindow()函數(shù)強制銷毀窗口,在對話框中映射WM_DESTROY消息,在消息處理函數(shù)中調(diào)用del

16、etethis,強行刪除自身對象。(2)通過向父窗口發(fā)送消息,要求其他窗口對其進行銷毀。首先需要定義一個消息用于進行通知,然后在對話框中映射WM_DESTROY消息,在消息處理函數(shù)中調(diào)用消息發(fā)送函數(shù)通知其他窗口。在接收消息的窗口中利用ON_MESSAGE映射處理消息的函數(shù),并在消息處理函數(shù)中刪除對話框?qū)ο蟆?4.6Windows通用對話框,在使用Windows的過程中,用戶經(jīng)常會遇到一些常用的有特定用途的對話框,如文件打開對話框、設置字體對話框等。這樣的對話框使用非常頻繁,為了使用戶不必自己設計該類型的對話框,Windows提供了一組標準用戶界面對話框,它們都由MFC庫中相應的類來支持,可以用

17、來執(zhí)行各種標準操作,如選擇文件、指定字體和選擇顏色等。,4.6.1CFontDialog對話框,CFontDialog類封裝了標準的字體對話框,使用戶可以從系統(tǒng)安裝的字體列表中選擇要用的字體,圖4-16即是一個“字體”對話框?!白煮w”對話框的創(chuàng)建與一般的對話框基本一樣,首先是構建一個CFontDialog對象,然后調(diào)用CFontDialog:DoModal()函數(shù)來啟動對話框。,CFontDialog類的構造函數(shù)如下:CFontDialog(LPLOGFONTlplfInitial=NULL,DWORDdwFlags=CF_EFFECTS|CF_SCREENFONTS,CDC*pdcPrint

18、er=NULL,CWnd*pParentWnd=NULL);,4.6.2CFileDialog對話框,很多Windows應用程序都具有打開文件和文件另存為功能,這兩項功能都需要使用對話框以獲取要打開的文件名或欲保存的文件名。CFileDialog類允許編程人員在程序中嵌入通用文件對話框,以實現(xiàn)Windows標準的“打開”和“另存為”對話框。,CFileDialog類的構造函數(shù)如下:CFileDialog(BOOLbOpenFileDialog,LPCTSTRlpszDefExt=NULL,LPCTSTRlpszFileName=NULL,DWORDdwFlags=OFN_HIDEREADONL

19、Y|OFN_OVERWRITEPROMPT,LPCTSTRlpszFilter=NULL,CWnd*pParentWnd=NULL),4.6.3CColorDialog對話框,CColorDialog類用于實現(xiàn)顏色通用對話框,使用戶可以從顏色列表中選擇要用的顏色。CColorDialog類的構造函數(shù)的格式為:CColorDialog(COLORREFclrInit=0,DWORDdwFlags=0,CWnd*pParentWnd=NULL);顯示顏色對話框的方法同顯示其他通用對話框一樣,都是先定義對象,然后調(diào)用DoModal()函數(shù),根據(jù)DoModal()函數(shù)返回的是IDOK還是IDCANCE

20、L可知道用戶是否確認了對顏色的選擇。DoModal()函數(shù)返回后,調(diào)用CColorDialog:GetColor()方法可以返回一個COLORREF類型的結果來指示在對話框中選擇的顏色。除此之外,也可以利用CColorDialog類中類型為CHOOSECOLOR的成員變量m_cc獲取選擇的顏色值。,4.6.4CPrintDialog對話框,CPrintDialog類支持Print(打?。┖蚉rintSetup(打印設置)對話框,通過這兩個對話框用戶可以進行與打印有關的操作。打印設置允許用戶指定打印時的特殊設置,并將自動處理安裝在用戶系統(tǒng)上的打印機特殊項。,CPrintDialog類的構造函數(shù)如

21、下所示:CPrintDialog(BOOLbPrintSetupOnly,DWORDdwFlags=PD_ALLPAGES|PD_USEDEVMODECOPIES|PD_NOPAGENUMS|PD_HIDEPRINTTOFILE|PD_NOSELECTION,CWnd*pParentWnd=NULL);,4.6.5CFindReplaceDialog對話框,CFindReplaceDialog類用于實現(xiàn)Find(查找)和Replace(替換)對話框。創(chuàng)建的對話框僅僅提供了標準接口,它允許輸入待查找和替換的字符串,而真正的查找和替換功能則需要程序員自己來實現(xiàn)。與其他通用對話框不同的是,查找和替換

22、對話框是非模式的,因此,對該類的使用要按照非模式對話框進行。,由于“查找和替換”對話框是非模式對話框,它的創(chuàng)建方式與其他4類公用對話框不同。CFindReplaceDialog對象是用new操作符在堆中創(chuàng)建的,而不是像普通對話框那樣以變量的形式創(chuàng)建。要啟動“查找和替換”對話框,應該調(diào)用CFindReplaceDialog:Create()函數(shù),而不是調(diào)用DoModal()函數(shù)。Create()函數(shù)的聲明如下:BOOLCreate(BOOLbFindDialogOnly,LPCTSTRlpszFindWhat,LPCTSTRlpszReplaceWith=NULL,DWORDdwFlags=FR

23、_DOWN,CWnd*pParentWnd=NULL);,CFindReplaceDialog類只提供了一個界面,它并不會自動實現(xiàn)搜索和替換功能。該類使用了一種特殊的通知機制,當用戶按下了操作的按鈕后,它會向父窗口發(fā)送一個通知消息,父窗口應在該消息的消息處理函數(shù)中實現(xiàn)搜索和替換。CFindReplaceDialog類提供了一組成員函數(shù)用來獲得與用戶操作有關的信息,如表4-12所示,這組函數(shù)一般應在通知消息處理函數(shù)中調(diào)用。,4.7編程實例對話框和控件使用綜合實例,1.編程要求建立一單文檔應用程序,運行該程序時首先出現(xiàn)登錄對話框,輸入的用戶名和密碼正確后方可進入程序運行界面。為程序添加“控件演示”

24、主菜單,并為其添加“按鈕示例”、“列表框示例”兩個子菜單項。編寫兩個子菜單項的消息處理函數(shù),使“按鈕示例”演示如何使用單選按鈕控制圖片變換,“列表框示例”演示如何使用列表框選擇不同的控件選項,然后動態(tài)生成并顯示。,2.編程實現(xiàn)(1)新建SDI項目。啟動MicrosoftVisualC+6.0,單擊“文件”“新建”命令,在彈出的“新建”對話框中切換到“工程”選項卡,并選擇“MFCAppWizardexe”選項,在工程名稱文本框中輸入“DialogControl”,然后單擊“確定”按鈕。在彈出的對話框中選擇“單文檔”單選按鈕,其他采取默認設置,然后單擊“下一步”按鈕。以后設置均采用向?qū)J設置,直

25、至完成。,(2)添加菜單。展開工作區(qū)的ResourceView頁面下的Menu文件夾,雙擊IDR_MAINFRAME,然后雙擊彈出窗口中的主菜單上的虛線框,彈出“菜單項目屬性”對話框,設置主菜單,標題設為“控件演示”。此時,選中“彈出”復選框表示其有下拉菜單。雙擊其下拉菜單上的虛線框,添加兩個子菜單,標題分別為“按鈕示例”和“組合框示例”,ID分別是“ID_BUTTON_TEST”和“ID_COMBO_TEST”。,(3)添加3個對話框資源。右擊Dialog文件夾,在彈出的快捷菜單中選擇“插入dialog”命令。在彈出的對話框資源上右擊并選擇“屬性”命令。在彈出的“對話屬性”對話框中設置其ID

26、為“IDD_IDENTITY”,標題為“身份驗證”。用同樣的方法創(chuàng)建“按鈕測試”和“組合框測試”對話框,其ID分別為“IDD_BUTTONTEST”和“IDD_COMBOTEST”。,(4)為對話框添加類。以“身份驗證”對話框為例,選中該對話框,按Ctrl+W組合鍵,彈出“AddingaClass”對話框,單擊“OK”按鈕,在彈出的“newclass”對話框中設置其類名為“CDlgIdentity”。使用同樣的方法為“按鈕測試”和“組合框測試”對話框添加類“CDlgButton”和“CDlgCombo”。(5)按圖4-21、圖4-22和圖4-23的布局分別為3個對話框添加控件,并按表413所示對控件的屬性進行設置。,(6)按Ctrl+W組合鍵,打開ClassWizard,切換到Me

溫馨提示

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

評論

0/150

提交評論