Visual C++基礎(chǔ)教程課件:創(chuàng)建應(yīng)用程序框架_第1頁
Visual C++基礎(chǔ)教程課件:創(chuàng)建應(yīng)用程序框架_第2頁
Visual C++基礎(chǔ)教程課件:創(chuàng)建應(yīng)用程序框架_第3頁
Visual C++基礎(chǔ)教程課件:創(chuàng)建應(yīng)用程序框架_第4頁
Visual C++基礎(chǔ)教程課件:創(chuàng)建應(yīng)用程序框架_第5頁
已閱讀5頁,還剩69頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

創(chuàng)建應(yīng)用程序框架

8.1應(yīng)用程序向?qū)ppWizard

8.2AppWizard生成的類和源文件

8.3項目和項目工作區(qū)

8.4ClassWizard

習(xí)題

8.1應(yīng)用程序向?qū)ppWizard

VisualC++提供了創(chuàng)建MFC應(yīng)用程序框架的應(yīng)用程序向?qū)FCAppWizard。MFCAppWizard提供了一系列的對話框,在對話框中提供了一些不同的選項,程序員通過不同的選項,可以建立不同類型和風(fēng)格的MFC應(yīng)用程序(可執(zhí)行文件程序或動態(tài)鏈接庫)。在完成這一系列對話框設(shè)置后,MFCAppWizard自動生成應(yīng)用程序的源代碼,包括頭文件、類的實現(xiàn)文件、資源文件和項目文件等,并使這些文件與ClassWizard兼容。

8.1.1MFCAppWizard[exe]的使用下面以建立一個單文檔應(yīng)用程序為例,說明MFCAppWizard[exe]應(yīng)用程序向?qū)У氖褂?。【?.1】建立與例7.2功能相似的MFC應(yīng)用程序。使用MFCAppWizard[exe]建立應(yīng)用程序的步驟如下:

(1)執(zhí)行“File”→“New”菜單命令,打開“New”對話框,如圖8-1所示。圖8-1New對話框的“Projects”頁面

(2)選定“Projects”標(biāo)簽,在左側(cè)項目類型列表框中選擇項目類型“MFCAppWizard[exe]”。在“Projectname”文本框中輸入項目名,本例為EX8_1。在“Location”文本框中輸入保存項目的路徑和文件夾名,或單擊右側(cè)的“瀏覽”按鈕,在打開的對話框中選擇保存項目的文件夾。向?qū)⒃谠撐募A下建立一個以項目名為名稱的子文件夾,用于保存此項目的所有文件。設(shè)置完成后,單擊“OK”按鈕,出現(xiàn)“MFCAppWizard-Step1”對話框,如圖8-2所示。圖8-2MFCAppWizard–Step1對話框

(3)在“MFCAppWizard-Step1”對話框中,可以選擇應(yīng)用程序的類型和資源所使用的語言。使用MFCAppWizard[exe]向?qū)Э梢越⑷N類型的應(yīng)用程序:

·Singledocument:單文檔界面應(yīng)用程序(SDI),即程序一次只能打開一個文檔,如Windows中的記事本。

·Multipledocument:多文檔界面應(yīng)用程序(MDI),即程序可以同時打開多個文檔,如MicrosoftWord97。

·Dialogbased:基于對話框的應(yīng)用程序,即程序運行后是對話框界面,如Windows中的計算器。選項“Document/Viewarchitecturesupport?”詢問應(yīng)用程序是否需要支持文檔/視圖體系結(jié)構(gòu)。在“Whatlanguagewouldyoulikeyourresourcesin?”欄中,可以選擇程序資源所使用的語言。本例中,選擇“Singledocument”以建立單文檔界面應(yīng)用程序,選中“Document/Viewarchitecturesupport?”,選擇使用“中文[中國][APPWZCHS.DLL]”。單擊“Next”按鈕,出現(xiàn)“MFCAppWizard-Step2of6”對話框,如圖8-3所示。圖8-3MFCAppWizard–Step2of6對話框

(4)在“MFCAppWizard–Step2of6”對話框中選擇對數(shù)據(jù)庫的支持方式,其中包括以下選項:

·None:不包括任何對數(shù)據(jù)庫的支持,但以后可以手工添加對數(shù)據(jù)庫的操作代碼。如果應(yīng)用程序不使用數(shù)據(jù)庫,則選擇該項將建立比較小的應(yīng)用程序。

·Headerfilesonly:提供最簡單的數(shù)據(jù)庫支持,在項目中包含數(shù)據(jù)庫頭文件,但不創(chuàng)建任何與數(shù)據(jù)庫相關(guān)的類,需要時必須自己創(chuàng)建。

·Databaseviewwithoutfilesupport:包含所有的數(shù)據(jù)庫頭文件,并創(chuàng)建相關(guān)的數(shù)據(jù)庫類和視圖類,但不包括文檔的序列化。

·Databaseviewwithfilesupport:包含所有的數(shù)據(jù)庫頭文件,創(chuàng)建相關(guān)的數(shù)據(jù)庫類和視圖類,并支持文檔的序列化。

需要注意的是,若在上一步?jīng)]有選擇“Document/Viewarchitecturesupport?”,則后兩個選項無效。另外,若選擇后兩個選項之一,還必須通過單擊“DataSource”設(shè)置數(shù)據(jù)源。本例應(yīng)用程序不使用數(shù)據(jù)庫,選擇“None”。單擊“Next”按鈕,出現(xiàn)“MFCAppWizard–Step3of6”對話框,如圖8-4所示。圖8-4MFCAppWizard–Step3of6對話框

(5)在“MFCAppWizard–Step3of6”對話框中選擇應(yīng)用程序?qū)?fù)合文檔的支持類型。如果建立的應(yīng)用程序為單文檔和多文檔界面,則可以選擇以下復(fù)合文檔支持選項:

·None:默認選項,應(yīng)用程序不支持任何復(fù)合文檔。

·Container:應(yīng)用程序作為復(fù)合文檔容器,可以嵌入或鏈接復(fù)合文檔對象。

·Mini-server:應(yīng)用程序可以創(chuàng)建被其它應(yīng)用程序嵌入的對象。應(yīng)用程序不能作為一個獨立的程序運行,只能被其它支持嵌入對象的程序啟動。

·Full-server:應(yīng)用程序可以創(chuàng)建被其它應(yīng)用程序嵌入或鏈接的對象,并能作為一個獨立的程序運行。

·Bothcontainerandserver:應(yīng)用程序既可以作為復(fù)合文檔容器,又可以作為一個可單獨運行的復(fù)合文檔服務(wù)器。

·Yes,please:應(yīng)用程序支持復(fù)合文檔格式的序列化,可以將包含復(fù)合文檔對象的文檔保存為一個文件。

·No,thankyou:不支持復(fù)合文檔格式的序列化,必須一次性將包含復(fù)合文檔對象的文檔裝入內(nèi)存。

·Automation:使應(yīng)用程序支持自動化,這樣應(yīng)用程序就可以被其它自動化客戶(如MicrosoftExcel)訪問。

·ActiveXControls:使應(yīng)用程序可以使用ActiveX控件。如果不選擇該項,以后要使應(yīng)用程序可以插入ActiveX控件,就必須自己進行相應(yīng)的初始化。本例中使用所有缺省選項。單擊“Next”按鈕,出現(xiàn)“MFCAppWizard–Step4of6”對話框,如圖8-5所示。圖8-5MFCAppWizard–Step4of6對話框

(6)在“MFCAppWizard–Step4of6”對話框中可以設(shè)置應(yīng)用程序的界面特征。

·Dockingtoolbar:缺省設(shè)置,為應(yīng)用程序添加一個標(biāo)準(zhǔn)的工具欄,且添加相應(yīng)的菜單命令來顯示或隱藏工具欄。

·Initialstatusbar:缺省設(shè)置,為應(yīng)用程序添加一個標(biāo)準(zhǔn)的狀態(tài)欄,且添加相應(yīng)的菜單命令來顯示或隱藏狀態(tài)欄。

·Printingandprintpreview:缺省設(shè)置,為應(yīng)用程序添加打印和打印預(yù)覽功能。

·Context-sensitiveHelp:應(yīng)用程序具有上下文相關(guān)聯(lián)的幫助系統(tǒng)。

·3Dcontrols:缺省選項,應(yīng)用程序界面具有三維立體外觀。

·MAPI(MessagingAPI):使應(yīng)用程序可以創(chuàng)建、操作、傳輸和存儲電子郵件。

·WindowsSockets:使應(yīng)用程序可以使用Sockets,支持TCP/IP協(xié)議。

·Normal:使用傳統(tǒng)風(fēng)格的工具欄。

·InternetExplorerReBars:采用類似IE瀏覽器風(fēng)格的工具欄。

·Howmanyfileswouldlikeonyourrecentfilelist?:在應(yīng)用程序的“文件”菜單下列出最近使用過的文檔的個數(shù)。單擊“Advanced”按鈕可以進行更進一步的設(shè)置,可以修改缺省的文件名和擴展名,調(diào)整窗口的樣式,確定是否使用分隔窗口等。本例使用缺省設(shè)置。單擊“Next”按鈕,出現(xiàn)“MFCAppWizard–Step5of6”對話框,如圖8-6所示。圖8-6MFCAppWizard–Step5of6對話框

(7)在“MFCAppWizard–Step5of6”對話框中可以對項目進行相應(yīng)的設(shè)置。

·MFCStandard:缺省設(shè)置,采用MFC標(biāo)準(zhǔn)風(fēng)格。

·WindowsExplorer:采用Windows資源管理器風(fēng)格,應(yīng)用程序窗口分為左右兩部分,左邊是一個樹型視圖,右邊是一個列表視圖。

·Yes,please:缺省選項,向?qū)г谠闯绦虼a內(nèi)插入相應(yīng)的注釋。

·No,thankyou:在源程序內(nèi)不插入注釋。

·AsasharedDLL:將MFC類庫作為應(yīng)用程序的共享動態(tài)鏈接庫。

·Asastaticallylinkedlibrary:采用靜態(tài)鏈接方式,將應(yīng)用程序中需要用到的MFC庫作為靜態(tài)庫插入到應(yīng)用程序中。這樣生成的應(yīng)用程序是一個完整的應(yīng)用程序,可以直接運行而不用考慮系統(tǒng)中是否安裝了所需的MFC類庫。本例中使用缺省設(shè)置。單擊“Next”按鈕,出現(xiàn)“MFCAppWizard–Step6of6”對話框,如圖8-7所示。圖8-7MFCAppWizard–Step6of6對話框

(8)在“MFCAppWizard–Step6of6”對話框中列出了向?qū)⒁傻念惖娜笔∶捌漕^文件和實現(xiàn)文件名,我們可以修改類名及其相關(guān)文件,另外可以修改某些類的基類。單擊“Finish”按鈕,出現(xiàn)“NewProjectInformation”對話框。

(9)在“NewProjectInformation”對話框中,顯示了用戶在前面各步驟中所做的設(shè)置和選擇??梢栽诖藢υ捒蛑袡z查前面的設(shè)置,若這些信息正確,則可以單擊“OK”按鈕,AppWizard將根據(jù)用戶的設(shè)置創(chuàng)建應(yīng)用程序框架。若需要修改相關(guān)內(nèi)容,則單擊“Cancel”按鈕返回到上一個對話框。應(yīng)用程序框架創(chuàng)建完成后,就可以編譯、鏈接并運行此程序。先執(zhí)行“Build”→“Build”菜單命令或按F7鍵或單擊工具欄上的創(chuàng)建按鈕創(chuàng)建可執(zhí)行文件,然后執(zhí)行“Build”→“Execute”菜單命令或按“Ctrl+F5”組合鍵或單擊工具欄上的執(zhí)行按鈕執(zhí)行應(yīng)用程序。因此,使用AppWizard創(chuàng)建應(yīng)用程序框架,無需編寫任何代碼就可以得到一個具有一定功能的完整的應(yīng)用程序。例8.1運行結(jié)果如圖8-8所示。圖8-8例8.1運行結(jié)果【例8.2】使用MFCAppWizard[exe]創(chuàng)建一個基于對話框的應(yīng)用程序,程序運行時顯示一個對話框。利用MFCAppWizard[exe]創(chuàng)建基于對話框的應(yīng)用程序框架的步驟與創(chuàng)建單文檔應(yīng)用程序框架的步驟相似,即:

(1)執(zhí)行“File”→“New”菜單命令,打開如圖8-1所示的“New”對話框。在“New”對話框中選擇項目類型為“MFCAppWizard[exe]”,輸入項目名為EX8_2,確定保存項目的路徑。單擊“OK”按鈕,出現(xiàn)如圖8-2所示的“MFCAppWizard-Step1”對話框。

(2)在“MFCAppWizard–Step1”對話框中選擇“Dialogbased”選項,單擊“Next”按鈕,出現(xiàn)如圖8-9所示的“MFCAppWizard-Step2of4”對話框。圖8-9MFCAppWizard-Step2of4對話框

(3)在“MFCAppWizard-Step2of4”對話框中可以設(shè)置應(yīng)用程序的特征,包括如下選項:

·Aboutbox:在程序中加入About對話框,顯示程序的版本信息。在程序?qū)υ捒虻目刂撇藛沃屑尤搿瓣P(guān)于”菜單。

·Pleaseenteratitleforyourdialog:在下面的文本框中輸入對話框的標(biāo)題。其它選項的含義與創(chuàng)建單文檔應(yīng)用程序時相同。本例使用缺省設(shè)置。單擊“Next”按鈕,進入下一步。

(4)創(chuàng)建對話框應(yīng)用程序的后續(xù)步驟與創(chuàng)建單文檔應(yīng)用程序的MFCAppWizard-Step5of6和MFCAppWizard-Step6of6相同(如圖8-6和圖8-7所示)。編譯、鏈接并運行程序,程序運行結(jié)果如圖8-10所示。圖8-10例8.2運行結(jié)果8.1.2基于框架構(gòu)造應(yīng)用程序利用MFC框架構(gòu)造應(yīng)用程序,就是在應(yīng)用程序向?qū)傻腗FC應(yīng)用程序框架的基礎(chǔ)上,加入特定的應(yīng)用程序代碼,添加新的資源,通過定義各個對象所響應(yīng)的消息和命令將它們連接起來構(gòu)成一個完整的應(yīng)用程序。同時,用戶利用C++語言和標(biāo)準(zhǔn)C++技術(shù),從MFC類庫所提供的類中派生出應(yīng)用程序自己的類,并重載基類成員以增強性能。開發(fā)基于框架的應(yīng)用程序時一般按如下幾個步驟進行:

(1)根據(jù)應(yīng)用程序的特性,利用應(yīng)用程序向?qū)FCAppWizard[exe]創(chuàng)建一個應(yīng)用程序框架。

(2)構(gòu)造應(yīng)用程序的用戶接口。利用VisualC++提供的資源編輯器為應(yīng)用程序添加、編輯用戶接口,如創(chuàng)建和編輯菜單、定義加速鍵、添加對話框、編輯工具欄以及其它資源。

(3)利用類向?qū)lassWizard或手工為各個類添加必要的數(shù)據(jù)成員和成員函數(shù)。

(4)利用ClassWizard為菜單命令、工具欄命令按鈕等添加命令消息處理函數(shù)和其它消息處理函數(shù)。

(5)根據(jù)應(yīng)用程序的具體要求編程實現(xiàn)各命令處理函數(shù)和消息處理函數(shù)。

(6)根據(jù)應(yīng)用程序的需要創(chuàng)建并實現(xiàn)附加類,并將其與框架進行有機的連接。

(7)調(diào)試和測試應(yīng)用程序。使用VisualC++工具鏈接、編譯和調(diào)試應(yīng)用程序,測試應(yīng)用程序的功能。8.2AppWizard生成的類和源文件使用MFCAppWizard[exe]創(chuàng)建應(yīng)用程序框架時,首先創(chuàng)建一個程序員指定名稱的項目,然后為此項目生成若干個類和一系列的文件,并保存在以項目名為名稱的文件夾下。程序員在圖8-2中指定的應(yīng)用程序的類型不同,由向?qū)傻念愐灿兴煌H笔∏闆r下,如果指定的應(yīng)用程序類型為單文檔界面應(yīng)用程序(SDI),則生成四個主要類和一個關(guān)于對話框類;若指定的是多文檔應(yīng)用程序(MDI),則生成五個主要類和一個關(guān)于對話框類;若指定的是基于對話框的應(yīng)用程序,則生成兩個主要類和一個關(guān)于對話框類。AppWizard生成的類名缺省時以字符“C”開頭,后接項目名,最后是類的種類標(biāo)識。應(yīng)用程序的功能主要分布在這些類中實現(xiàn),類之間通過公有成員函數(shù)來傳遞消息并進行相互間的通信和數(shù)據(jù)交換。8.2.1應(yīng)用程序類應(yīng)用程序類CEX8_1App從CWinApp派生,其頭文件為EX8_1.h,實現(xiàn)文件為EX8_1.cpp。應(yīng)用程序類控制應(yīng)用程序的所有對象(文檔、視圖和框架窗口),并負責(zé)完成應(yīng)用程序的初始化、程序的啟動和程序運行結(jié)束時的清理工作。每個基于MFC的Windows應(yīng)用程序都必須有且只有一個從類CWinApp派生的派生類的全局對象,通過這個對象進入應(yīng)用程序主函數(shù)WinMain并創(chuàng)建文檔、視圖和框架窗口對象。在應(yīng)用程序類CEX8_1App中重載了CWinApp類的虛函數(shù)InitInstance,由第7章已經(jīng)知道,在派生的應(yīng)用程序類中必須重載InitInstance函數(shù)。缺省時,由AppWizard生成的InitInstance函數(shù)主要完成以下工作:

(1)在注冊表中注冊應(yīng)用程序。通過調(diào)用函數(shù)SetRegistryKey完成注冊。

(2)創(chuàng)建并注冊文檔模板。文檔模板用于存放與應(yīng)用程序的文檔、視圖和邊框窗口有關(guān)的信息。創(chuàng)建或打開文檔時,應(yīng)用程序使用文檔模板創(chuàng)建文檔類對象來存放文檔,創(chuàng)建視圖類對象來顯示文檔,創(chuàng)建框架窗口類對象來容納標(biāo)題欄、菜單欄、工具欄和視圖窗口。

(3)處理命令行參數(shù)。應(yīng)用程序運行時,可以在命令行中指定參數(shù),例如指定打開的文件等。

(4)通過調(diào)用ShowWindow和UpdateWindow函數(shù)顯示和更新框架窗口。在此函數(shù)中,可以根據(jù)應(yīng)用程序的需要添加其它的初始化代碼。在應(yīng)用程序類中還有菜單“幫助”→“關(guān)于”命令的消息處理函數(shù)OnAppAbout,用于打開關(guān)于對話框。在文件EX8_1.cpp中定義了與關(guān)于對話框相關(guān)聯(lián)的對話框類CAboutDlg。8.2.2框架窗口類框架窗口類CMainFrame從CFrameWnd類派生,其頭文件為MainFrm.h,實現(xiàn)文件為MainFrm.cpp。它主要負責(zé)管理應(yīng)用程序窗口,創(chuàng)建并顯示標(biāo)題欄、菜單欄、工具欄和狀態(tài)欄。

AppWizard生成的框架窗口類中添加了對框架窗口創(chuàng)建時發(fā)送的消息WM_CREATE的處理函數(shù)OnCreate,在此函數(shù)中首先調(diào)用基類的OnCreate函數(shù),基類的OnCreate通過調(diào)用OnCreateClient創(chuàng)建視圖窗口對象,然后創(chuàng)建工具欄和狀態(tài)欄,并使工具欄成為可移動的。在CMainFrame類中還重載了虛函數(shù)PreCreateWindow,此函數(shù)在創(chuàng)建框架窗口前由應(yīng)用程序框架調(diào)用。可以通過修改CREATESTRUCT結(jié)構(gòu)參數(shù)cs的值來改變窗口的默認風(fēng)格,例如改變窗口大小和位置,修改窗口背景、光標(biāo)和圖標(biāo)等。8.2.3文檔類文檔類CEX8_1Doc從CDocument類派生,其頭文件為EX8_1Doc.h,實現(xiàn)文件為EX8_1Doc.cpp。它主要負責(zé)應(yīng)用程序數(shù)據(jù)的保存和裝載,實現(xiàn)文檔的序列化功能。文檔類CEX8_1Doc主要包含兩個成員函數(shù),一個是OnNewDocument,另一個是Serialize。當(dāng)用戶執(zhí)行“文件”→“新建”命令時,MFC應(yīng)用程序框架會自動調(diào)用OnNewDocument函數(shù);另外,在應(yīng)用程序啟動時也會調(diào)用此函數(shù)。OnNewDocument函數(shù)主要用于初始化文檔。函數(shù)Serialize用來負責(zé)文檔數(shù)據(jù)的保存和讀取。8.2.4視圖類視圖類CEX8_1View是從CView派生的,其頭文件為EX8_1View.h,實現(xiàn)文件為EX8_1View.cpp。視圖類用于處理客戶區(qū)窗口,是框架窗口的一個子窗口,負責(zé)應(yīng)用程序數(shù)據(jù)的顯示以及如何進行人機交互。在視圖類CEX8_1View中重載了基類CView的成員函數(shù)GetDocument,通過此函數(shù)可以獲取與此視圖窗口關(guān)聯(lián)的文檔類的指針m_pDocument。由于視圖窗口主要用來顯示文檔內(nèi)的數(shù)據(jù),因此通過此指針就可以訪問文檔類的數(shù)據(jù)成員和成員函數(shù)。

在視圖類CEX8_1View中還重載了基類CView的虛函數(shù)OnDraw。此函數(shù)被應(yīng)用程序框架調(diào)用,負責(zé)文檔數(shù)據(jù)在視圖窗口中的輸出。當(dāng)產(chǎn)生屏幕更新、打印和打印預(yù)覽消息時,框架自動調(diào)用此函數(shù)。實際上,在CView類的WM_PAINT消息處理函數(shù)OnPaint中調(diào)用了OnDraw函數(shù),因此,每當(dāng)視圖窗口需要更新時都會自動調(diào)用OnDraw。如果用戶在應(yīng)用程序的視圖類中添加了對WM_PAINT的處理函數(shù),則用戶可以選擇是否調(diào)用OnDraw。例如例8.1中在OnDraw函數(shù)中添加了顯示文字的代碼。另外,在視圖類CEX8_1View中還重載了基類CView的三個虛函數(shù)OnPreparePrinting、OnBeginPrinting和OnEndPrinting,用來負責(zé)處理與打印預(yù)覽和打印有關(guān)的事務(wù)。三個函數(shù)中,只在OnPreparePrinting中調(diào)用了基類的同名函數(shù),其它兩個函數(shù)為空,需要用戶添加附加的初始化代碼和打印結(jié)束后的清理代碼。8.2.5對話框類對話框類CAboutDlg從CDialog派生,其定義和實現(xiàn)都在EX8_1.cpp文件中,當(dāng)執(zhí)行“幫助”→“關(guān)于”菜單命令時,顯示關(guān)于程序版本信息的對話框。8.2.6其它文件除了生成主要類的源代碼文件外,AppWizard還生成為建立應(yīng)用程序所必需的其它文件:

(1)?Resource.h:資源頭文件,用于定義項目中所有資源的標(biāo)識符,給資源ID分配一個整數(shù)值。

(2)?StdAfx.h和StdAfx.cpp:標(biāo)準(zhǔn)包含文件,用于生成項目的預(yù)編譯頭文件(EX8_1.pch)和預(yù)編譯類型信息文件(StdAfx.obj)。預(yù)編譯文件用于提高項目的編譯速度。

(3)?EX8_1.clw:類向?qū)募?,存放由MFCClassWizard使用的信息。利用ClassWizard類向?qū)砑有骂?、為類添加?shù)據(jù)成員和成員函數(shù)時要使用該文件,利用ClassWizard建立和編輯消息映射時也需要存儲在該文件中的信息。

(4)?EX8_1.rc:包含資源描述信息的資源文件。資源文件列出了應(yīng)用程序所有的資源,包括存儲在子目錄\res中的圖標(biāo)、位圖和光標(biāo)。一般利用VisualC++IDE的資源編輯器對資源進行可視化編輯,也可以通過Open命令以文本方式打開一個資源文件進行編輯。

(5)?res\EX8_1.rc2:包含不是由VisualC++資源編輯器編輯的資源??梢詫⑺胁荒苡少Y源編輯器編輯的資源放置到該文件中。

(6)?res\EX8_1Doc.ico:文檔圖標(biāo)文件,一般顯示在多文檔界面程序的子窗口上,在SDI程序中不顯示該圖標(biāo)。

(7)?res\EX8_1.ico:應(yīng)用程序圖標(biāo)文件。在資源管理器中用此圖標(biāo)作為應(yīng)用程序的圖形標(biāo)識,在程序運行后此圖標(biāo)將出現(xiàn)在主窗口標(biāo)題欄的最左端。

(8)?res\Toolbar.bmp:用于創(chuàng)建工具欄按鈕的位圖文件,該位圖是擁用程序工具欄中所有圖標(biāo)的圖形表示。可利用工具欄編輯器對該位圖進行編輯。

(9)?EX8_1.dsp:項目文件,保存該項目有關(guān)源代碼文件、資源文件以及項目設(shè)置的有關(guān)信息。

(10)?EX8_1.dsw:項目工作區(qū)文件,保存上一次操作結(jié)束時VisualC++窗口的狀態(tài)、位置以及針對該項目工作區(qū)所做的設(shè)置信息。當(dāng)用戶需要打開某個項目時,只需要利用VisualC++打開此文件即可。

(11)?Readme.txt:項目自述文件,該文件介紹了AppWizard所創(chuàng)建文件的內(nèi)容和功能,并告訴程序員在什么位置添加自己的代碼以及如何更改程序所用的語言。8.3項目和項目工作區(qū)在VisualC++中以項目(Project)的方式管理應(yīng)用程序的各個元素,一個程序?qū)?yīng)一個項目,項目通常位于項目工作區(qū)(Workspace)中。VisualC++的項目工作區(qū)可以容納多個項目。例如,如果你正在編寫一個動態(tài)鏈接庫(DynamicLinkLibrary,DLL),則可以在項目工作區(qū)中為DLL創(chuàng)建一個項目,然后在同一項目工作區(qū)創(chuàng)建另一個項目來測試這個動態(tài)鏈接庫。對于初學(xué)者,一般在一個項目工作區(qū)中只包含一個項目,在創(chuàng)建一個新的項目時,如果VisualC++項目工作區(qū)窗口中有打開的項目,可以執(zhí)行“File”→“CloseWorkspace”菜單命令關(guān)閉當(dāng)前項目工作區(qū),或在創(chuàng)建新項目時,在圖8-1所示的New對話框中選中“Createnewworkspace”選項。8.3.1項目在VisualC++的集成開發(fā)環(huán)境中,可以通過“File”→“New”菜單命令來創(chuàng)建一個新的項目。在圖8-1中可以發(fā)現(xiàn),VisualC++可以創(chuàng)建各種類型的項目,創(chuàng)建的每一個項目都會自動生成一個項目文件,其后綴名為?.DSP。項目名是項目中其它文件命名的基礎(chǔ)。項目文件保存了該項目有關(guān)源代碼文件、資源文件以及項目設(shè)置的有關(guān)信息。項目是一些相互關(guān)聯(lián)的文件的集合,如類定義和實現(xiàn)的源代碼文件、資源文件等,這些文件被編譯、鏈接后,形成Windows應(yīng)用程序。8.3.2項目工作區(qū)項目工作區(qū)代表了特定項目的集合,每個工作區(qū)可以包含一個或多個項目。通過“Project”→“InsertProjectintoWorkspace”菜單命令,可以將不同的項目加入到同一個項目工作區(qū)。本書不涉及具有多個項目的項目工作區(qū)。每個項目工作區(qū)有一個項目工作區(qū)文件(文件名后綴為.DSW),它負責(zé)組織項目中的文件,保存項目描述內(nèi)容和設(shè)置信息??梢岳庙椖抗ぷ鲄^(qū)窗口去查看和訪問項目中的各種組件。創(chuàng)建一個項目的同時,VisualC++為這個項目創(chuàng)建了一個缺省的項目工作區(qū),項目工作區(qū)可以采用如下方法進行修改:

·通過“Project”→“Settings”菜單命令來對項目進行設(shè)置。

·通過“Tools”菜單的“Options”或“Customize”命令來改變項目工作區(qū)的設(shè)置。利用“Options”對話框中的“Workspace”標(biāo)簽,可以定制不同的窗口、狀態(tài)欄以及項目工作區(qū)的其它部件。利用“Editor”標(biāo)簽,可以指定源代碼編輯器的有關(guān)設(shè)置。利用“Customize”對話框,可以重新布局、增加、減少工具欄按鈕以及菜單命令、鍵盤快捷鍵等。提示:關(guān)于項目工作區(qū)的詳細設(shè)置,可以通過在MSDN的索引中輸入關(guān)鍵字“Customizing”來查詢。8.3.3項目工作區(qū)窗口的使用當(dāng)創(chuàng)建一個新的項目或打開一個項目時,這個項目成為當(dāng)前項目。在VisualC++的集成開發(fā)環(huán)境窗口中,缺省時會打開一個項目工作區(qū)窗口,如圖8-11所示。對于Win32控制臺應(yīng)用程序項目,項目工作區(qū)窗口下有“ClassView”和“FileView”兩個標(biāo)簽;對于Windows應(yīng)用程序項目,窗口下多一個“ResourceView”標(biāo)簽。可以通過以下方式控制項目工作區(qū)窗口:

·如果在VisualC++集成開發(fā)環(huán)境中沒有項目工作區(qū)窗口,可以執(zhí)行“View”→“Workspace”菜單命令。

·單擊項目工作區(qū)窗口右上角的關(guān)閉按鈕“×”,可以關(guān)閉項目工作區(qū)窗口。

·單擊工具欄上的Workspace按鈕,可以讓窗口在可見與不可見之間轉(zhuǎn)換。圖8-11項目工作區(qū)窗口

1.?ClassView的使用單擊項目工作區(qū)窗口的“ClassView”標(biāo)簽,窗口中將以樹型結(jié)構(gòu)顯示項目中所包含的C++類及類成員的列表,如圖8-11所示。在每個類的成員(數(shù)據(jù)成員和成員函數(shù))左側(cè)都有一個小圖標(biāo),這個圖標(biāo)給出了成員類型(數(shù)據(jù)成員和成員函數(shù))以及訪問權(quán)限。各種圖標(biāo)的含義如表8-1所示。表8-1ClassView中各圖標(biāo)的含義圖標(biāo)(方塊為藍色)含義圖標(biāo)(方塊為紫色)含義公有數(shù)據(jù)成員公有成員函數(shù)保護數(shù)據(jù)成員保護成員函數(shù)私有數(shù)據(jù)成員私有成員函數(shù)通過ClassView,可以方便地查看和編輯源代碼文件,給類添加數(shù)據(jù)成員和成員函數(shù)以及在項目中添加新類。操作方法如下:

·單擊每個類名前的可以展開類,查看類的成員,單擊類名前的可以折疊。

·雙擊類名可以打開類定義的頭文件(?.h),光標(biāo)停留在類聲明開始處。

·雙擊成員函數(shù)可以打開程序代碼,光標(biāo)定位于類的成員函數(shù)的實現(xiàn)代碼處。

·在ClassView中添加新類的方法:右擊項目工作區(qū)窗口頂部的項目名,在彈出的快捷菜單中選擇“NewClass”命令,在“NewClass”對話框中指定類名和基類,單擊“OK”按鈕。

·右擊類名,彈出如圖8-12所示的快捷菜單,可以在類中添加數(shù)據(jù)成員、成員函數(shù),重載虛函數(shù)和添加消息處理等。圖8-12右擊類的快捷菜單

·右擊成員函數(shù),彈出如圖8-13所示的快捷菜單,可以刪除函數(shù),查看函數(shù)的定義和聲明等。

圖8-13右擊成員函數(shù)的快捷菜單

2.?FileView的使用單擊項目工作區(qū)窗口下的“FileView”標(biāo)簽,項目工作區(qū)窗口將以樹形結(jié)構(gòu)分類顯示項目中的文件,如圖8-14所示。“FileView”的使用方法如下:

·雙擊文件名可以打開此文件。

·右擊文件名,彈出快捷菜單,可以進行項目設(shè)置、編譯文件和查看文件屬性等。圖8-14項目工作區(qū)窗口的“FileView”標(biāo)簽

3.?ResourceView的使用單擊項目工作區(qū)窗口下的“ResourceView”標(biāo)簽,項目工作區(qū)窗口中顯示一個由不同類型的資源文件組成的樹形結(jié)構(gòu),如圖8-15所示。使用ResourceView不僅可以查看已經(jīng)存在的資源,還可以實現(xiàn)對資源的編輯、創(chuàng)建新的資源和導(dǎo)入資源。圖8-15項目工作區(qū)窗口的“ResourceView”標(biāo)簽

·查看資源。展開需要查看資源的文件夾,雙擊資源的ID,VisualC++自動以合適的編輯器打開這項資源。例如,想要查看菜單資源,先展開“Menu”文件夾,雙擊菜單資源的ID(IDR_MAINFRAME),VisualC++自動用菜單編輯器打開此菜單資源。

·資源的編輯。按查看資源的步驟打開欲編輯的資源,然后在相應(yīng)的資源編輯器中編輯和修改。

·資源的創(chuàng)建。要在項目中添加一個新的資源,可以執(zhí)行“Insert”→“Resource”菜單命令,在彈出的“InsertResource”對話框中,雙擊需要創(chuàng)建的資源。另外,在項目工作區(qū)窗口的“ResourceView”標(biāo)簽中,右擊項目名或文件夾名,會出現(xiàn)快捷菜單,執(zhí)行“Insert”命令也會打開“InsertResource”對話框。

·資源的刪除。在“ResourceView”標(biāo)簽中選中要刪除的資源,按下“Delete”鍵,即可刪除這個資源。8.4ClassWizard

在開發(fā)一個基于MFC的Windows應(yīng)用程序時,AppWizard只使用一次。當(dāng)創(chuàng)建完應(yīng)用程序框架后,程序員所要做的工作就是為應(yīng)用程序特定的功能添加代碼。當(dāng)需要為應(yīng)用程序添加消息處理函數(shù)和對話框控件的成員變量,或者為程序添加新的MFC派生類時,需要使用ClassWizard類向?qū)?。ClassWizard就像程序員的助手,是進行MFC應(yīng)用程序設(shè)計時必不可少的工具。當(dāng)打開一個項目或創(chuàng)建一個新的項目后,“View”菜單中會出現(xiàn)“ClassWizard”菜單項,這時才能使用ClassWizard類向?qū)?。?zhí)行“View”→“ClassWizard”菜單命令或按“Ctrl+W”快捷鍵,打開如圖8-16所示的“MFCClassWizard”對話框。圖8-16ClassWizard類向?qū)υ捒颉癕FCClassWizard”對話框共有五個標(biāo)簽:“MessageMaps”用來處理消息映射,為消息添加或刪除處理函數(shù),查看已被處理的消息并定位消息處理函數(shù)代碼;“MemberVariables”標(biāo)簽用來給對話框控件添加或刪除變量;“Automation”標(biāo)簽提供了OLE自動化的屬性和方法的管理;“ActiveXEvents”標(biāo)簽用于管理ActiveX類所支持的ActiveX事件;“ClassInfo”標(biāo)簽顯示應(yīng)用程序中所包含類的信息,如類的頭文件、實現(xiàn)文件和基類信息等。在“MFCClassWizard”對話框中,經(jīng)常使用的是“MessageMaps”和“MemberVariables”標(biāo)簽。

“MFCClassWizard”對話框中的“MessageMaps”標(biāo)簽主要用于消息映射和為類重載虛函數(shù)?!癕essageMaps”標(biāo)簽下,“Project”列表框列出了當(dāng)前項目工作區(qū)中項目的名稱;“Classname”下拉列表框列出了當(dāng)前項目中的類;“ObjectIDs”列表框列出了能產(chǎn)生消息的對象的ID,這些消息能在當(dāng)前類中進行消息處理,如菜單項、對話框控件等,一般第一項為當(dāng)前類的類名;“Messages”列表框列出了在“ObjectIDs”框中選擇的對象可處理的消息和可重載的MFC虛函數(shù);“Memberfunctions”框列出了所選擇類中已添加的消息處理函數(shù)和已重載的虛函數(shù),函數(shù)前的“V”標(biāo)記表示該函數(shù)為虛函數(shù),“W”標(biāo)記表示該函數(shù)為消息處理函數(shù)。8.4.1添加消息處理函數(shù)下面結(jié)合例8.1,學(xué)習(xí)利用ClassWizard類向?qū)砑酉⑻幚砗瘮?shù)的方法。當(dāng)例8.1啟動時,在視圖窗口的客戶區(qū)域中央顯示一字符串,在客戶區(qū)域單擊鼠標(biāo)左鍵,以鼠標(biāo)指針點為中心,畫一個圓。

(1)若例8.1的項目不是當(dāng)前項目,則應(yīng)先打開此項目。執(zhí)行“File”→“Open”菜單命令,在“打開”對話框中查找到項目工作空間文件“EX8_1.dsw”,單擊“打開”按鈕。

(2)執(zhí)行“View”→“ClassWizard”菜單命令,彈出“MFCClassWizard”對話框。

(3)選擇“MessageMaps”標(biāo)簽,在“Project”列表框中選中項目“EX8_1”,在“Classname”列表框中選擇添加消息處理函數(shù)的類。例8.1中由視圖窗口處理鼠標(biāo)左鍵按下的消息WM_LBUTTONDOWN,因此,選擇視圖類“CEX8_1View”。在“ObjectIDs”列表框中選擇“CEX8_1View”,在“Messages”列表框中選擇消息“WM_LBUTTONDOWN”,然后單擊“AddFunction”按鈕(或雙擊消息名),則在“Memberfunctions”列表框中添加相應(yīng)的函數(shù)名“OnLButtonDown”和消息映射項“ON_WM_LBUTTONDOWN”。

(4)在“Memberfunctions”列表框中選擇消息處理函數(shù)“OnLButtonDown”,單擊“EditCode”按鈕,關(guān)閉對話框,VisualC++代碼窗口自動打開此消息處理函數(shù),以便在消息處理函數(shù)中添加代碼。在消息處理函數(shù)“OnLButtonDown”中添加如下代碼:

voidCEX8_1View::OnLButtonDown(UINTnFlags,CPointpoint)

{ CClientDCdc(this); CRectrect(point.x-50,point.y-50,point.x+50,point.y+50); dc.Ellipse(rect); CView::OnLButtonDown(nFlags,point);

}

說明:其中的黑體為手工添加的代碼,其它為ClassWizard自動生成的函數(shù)結(jié)構(gòu)和注釋。在本書后面也一樣,黑體為手工添加的代碼,其它為AppWizard或ClassWizard等向?qū)ё詣由傻摹?.4.2編輯消息處理函數(shù)在例7.2中,為了使應(yīng)用程序啟動時自動在窗口客戶區(qū)域顯示字符串,在框架窗口類中添加了消息WM_PAINT的處理函數(shù)。在AppWizard生成的應(yīng)用程序框架中,框架窗口作為菜單、工具欄、狀態(tài)欄和視圖窗口的容器,框架窗口的客戶區(qū)域被它們所覆蓋,用戶一般直接與視圖窗口進行交互。在MFC的視圖類CView中,已經(jīng)添加了消息WM_PAINT的處理函數(shù),如下所示:

voidCView::OnPaint()

{ CPaintDCdc(this); OnPrepareDC(&dc); OnDraw(&dc);

}該函數(shù)缺省調(diào)用了CView類的虛函數(shù)OnDraw。OnDraw除了支持顯示器外,還支持打印機。因此,在AppWizard生成的應(yīng)用程序框架中,一般不再重載OnPaint消息處理函數(shù),只需要在重載的OnDraw中添加相應(yīng)的代碼即可。當(dāng)產(chǎn)生WM_PAINT消息時,系統(tǒng)會自動調(diào)用OnDraw函數(shù)。在例8.1的視圖類CEX8_1View的函數(shù)OnDraw中添加代碼,當(dāng)應(yīng)用程序啟動時,在視圖窗口中央顯示字符串“歡迎學(xué)習(xí)MFC!”,操作步驟如下:

(1)執(zhí)行“View”→“ClassWizard”菜單命令,打開“MFCClassWizard”對話框。

(2)在“Classname”下選中消息處理函數(shù)所在的類(例8.1中函數(shù)OnDraw在類CEX8_1View中,選中CEX8_1View);在“Memberfunctions”列表框中選擇要編輯的消息處理函數(shù),單擊“EditCode”按鈕(或直接雙擊消息處理函數(shù)),則自動跳轉(zhuǎn)到消息處理函數(shù)的開始處,可以直接添加相應(yīng)的代碼。在例8.1的CEX8_1View::OnDraw函數(shù)中添加如下代碼(黑體代碼):

voidCEX8_1View::OnDraw(CDC*pDC)

{ CEX8_1Doc*pDoc=GetDocument(); ASSERT_VALID(pDoc); //TODO:adddrawcodefornativedatahere

CRectrect;

GetClientRect(&rect);

pDC->DrawText(_T("歡迎學(xué)習(xí)MFC!"),-1,&rect,

DT_SINGLELINE|DT_CENTER|DT_VCENTER);

}

執(zhí)行“Buld”→“Buld”菜單命令(或按F7快捷鍵)編譯、鏈接程序。例8.1運行的結(jié)果如圖8-17所示。圖8-17例8.1的運行結(jié)果編輯消息處理函數(shù)也可以使用項目工作區(qū)窗口的“ClassView”標(biāo)簽,展開消息處理函數(shù)所在的類,雙擊函數(shù)名,則VisualC++自動打開消息處理函數(shù),光標(biāo)定位在函數(shù)上。8.4.3刪除消息處理函數(shù)利用ClassWizard刪除消息處理函數(shù)的過程如下:

(1)在“MFCClassWizard”對話框中選擇“Messa

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論