第2章 vc++ 應(yīng)用程序框架和基本流程ppt課件_第1頁(yè)
第2章 vc++ 應(yīng)用程序框架和基本流程ppt課件_第2頁(yè)
第2章 vc++ 應(yīng)用程序框架和基本流程ppt課件_第3頁(yè)
第2章 vc++ 應(yīng)用程序框架和基本流程ppt課件_第4頁(yè)
第2章 vc++ 應(yīng)用程序框架和基本流程ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第2章 運(yùn)用程序框架和根本流程 2.1 運(yùn)用程序框架2.2 運(yùn)用程序的根本流程2.3 運(yùn)用程序框架類2.1 運(yùn)用程序框架 所謂運(yùn)用程序框架(application framework),就是運(yùn)用程序所應(yīng)具備的普通性軟件模塊按一定的構(gòu)造組成的集合?;贛FC的運(yùn)用程序框架是定義了程序構(gòu)造的MFC類庫(kù)中類的集合。 運(yùn)用MFC運(yùn)用程序框架能獲得規(guī)范化的程序構(gòu)造和用戶接口,極大地減輕程序員的負(fù)擔(dān),使程序員不用過(guò)多地思索用戶界面,而把主要精神放在程序設(shè)計(jì)上,以提高程序設(shè)計(jì)的效率。 運(yùn)用程序框架實(shí)踐上是一個(gè)完好的程序模型,具備規(guī)范運(yùn)用軟件所需的一切根本功能,如文件存取、打印預(yù)覽、數(shù)據(jù)交換,窗口陳列,以及這

2、些功能的運(yùn)用接口菜單、工具欄、形狀欄、對(duì)話框等。 有了運(yùn)用程序框架之后,程序員只需依個(gè)人需求在派生類中改寫虛函數(shù),定義新的數(shù)據(jù)成員,用資源編輯器添加或修正用戶界面,進(jìn)展音訊映射,用MFC類實(shí)現(xiàn)框架中未完成的運(yùn)用程序的特定功能部分。 Sample程序2.1.1 運(yùn)用程序根本構(gòu)造 Windows運(yùn)用程序都有一個(gè)窗口作為程序的輸入/輸出和用戶操作界面,而內(nèi)部的運(yùn)轉(zhuǎn)系依托外部發(fā)生的事件來(lái)驅(qū)動(dòng)。在程序啟動(dòng)、創(chuàng)建和顯示窗口后,程序不斷等待任何能夠的輸入,然后做判別,再做適當(dāng)?shù)奶幹谩?這里,“輸入是由操作系統(tǒng)經(jīng)過(guò)USER模塊捕捉到之后,以音訊方式一種數(shù)據(jù)構(gòu)造進(jìn)入程序的音訊隊(duì)列之中。因此,為了不斷地從音訊隊(duì)列

3、中獲取音訊,轉(zhuǎn)換音訊,分配音訊給適當(dāng)?shù)奶幹煤瘮?shù),每一個(gè)Windows程序都應(yīng)該有一個(gè)音訊循環(huán)。 在Windows程序中,接受并處置音訊的主角一定是窗口。因此,每一個(gè)窗口都應(yīng)該有一個(gè)函數(shù)擔(dān)任處置音訊,我們稱此函數(shù)為“窗口函數(shù)。窗口函數(shù)WindowProc以switch/case的方式判別音訊的類別,決議處置的方式。另外,對(duì)于一個(gè)窗口,還必需有創(chuàng)建窗口的函數(shù)CreateWindow和顯示窗口的函數(shù)ShowWindow。 在DOS系統(tǒng)下,C/C+程序都有一個(gè)主函數(shù)main,控制程序的流程。同樣,在Windows系統(tǒng)下,每一個(gè)由C/C+編寫的Windows程序也有一個(gè)主函數(shù)AfxWinMain,控制W

4、indows程序的流程。 此外,每個(gè)Windows程序?qū)嵗幸恍┏跏蓟蝿?wù)需求完成。因此,就應(yīng)該定義一個(gè)初始化函數(shù):InitInstance。 縱上所述,一個(gè)Windows程序的根本構(gòu)造至少包括:音訊循環(huán)函數(shù)Run、窗口函數(shù)WindowProc、窗口創(chuàng)建函數(shù)CreateWindow、窗口顯示函數(shù)ShowWindow、主函數(shù)AfxWinMain、程序初始化函數(shù)InitInstance。 因此,在MFC類庫(kù)中,運(yùn)用程序類CWinApp封裝了音訊循環(huán)函數(shù)Run、程序初始化函數(shù)InitInstance和退出函數(shù)ExitInstance 。 基于上述情況,采用MFC類庫(kù)開(kāi)發(fā)的一切Windows程序都至少

5、有一個(gè)從CWinApp派生的運(yùn)用程序類和一個(gè)從CWnd派生的窗口類,而AfxWinMain函數(shù)那么由系統(tǒng)提供,不能更改。 窗口基類CWnd那么封裝了窗口函數(shù)WindowProc、窗口創(chuàng)建函數(shù)Create、窗口顯示函數(shù)ShowWindow,并把窗口句柄HWND定義為數(shù)據(jù)成員,還定義了大量的Windows音訊處置函數(shù)。2.1.2 運(yùn)用導(dǎo)游生成運(yùn)用程序框架 AppWizard可為運(yùn)用MFC的典型Windows運(yùn)用程序建立開(kāi)發(fā)工程,提供了一系列的對(duì)話框,及多種選項(xiàng)供用戶選擇,用戶可以根據(jù)不同的選項(xiàng)生本錢人所需的具有各種特征的運(yùn)用程序框架。 AppWizard :參見(jiàn)教材P59 (圖2.1圖2.10。

6、下面經(jīng)過(guò)AppWizard來(lái)生成一個(gè)最簡(jiǎn)單的運(yùn)用程序框架(Hello程序)。 從AppWizard Step1可見(jiàn),MFC生成的運(yùn)用程序的用戶界面只需三種類型: 單文檔型:主邊框窗口+視圖+文檔 多文檔型:主邊框窗口+子邊框窗口+視圖+文檔 對(duì)話框型:對(duì)話框+控件 我們也可以進(jìn)一步把MFC運(yùn)用程序的用戶界面簡(jiǎn)化為二種類型,并簡(jiǎn)稱為窗口型和對(duì)話框型: 窗口型:邊框窗口 + 視圖 對(duì)話框型:對(duì)話框 + 控件2.2.1 創(chuàng)建全局對(duì)象2.2 運(yùn)用程序的根本流程 運(yùn)用程序類構(gòu)成了運(yùn)用程序的主執(zhí)行線程。每個(gè)基于MFC類庫(kù)而建立的運(yùn)用程序都必需有一個(gè)且只需一個(gè)從CWinApp類派生的全局對(duì)象。以Hello程

7、序?yàn)槔?,在運(yùn)用程序類的實(shí)現(xiàn)文件HelloApp.cpp中定義: CHelloApp theApp; 2.2.2 AfxWinMain函數(shù) main函數(shù)是普通C/C+ DOS型程序的進(jìn)入點(diǎn),而AfxWinMain函數(shù)那么是Windows程序的進(jìn)入點(diǎn)。 但在VC中程序員不用編寫AfxWinMain代碼,它是由MFC類庫(kù)提供的,在運(yùn)用程序啟動(dòng)時(shí)自動(dòng)調(diào)用這個(gè)函數(shù)。AfxWinMain函數(shù)(winmain.cpp)定義為: CWinThread* pThread = AfxGetThread(); AfxWinInit(); /圖形用戶界面初始化 pThread-InitApplication(); /

8、程序初始化 pThread-InitInstance(); /程序?qū)嵗跏蓟?pThread-Run(); /音訊循環(huán)(程序運(yùn)轉(zhuǎn)) AfxWinTerm(); /程序終止 InitApplication函數(shù)普通沒(méi)有本質(zhì)性的內(nèi)容,程序的初始化主要經(jīng)過(guò)InitInstance函數(shù)完成。 InitInstance函數(shù)主要完成窗口的創(chuàng)建、顯示和更新等重要的初始化任務(wù),是CWinApp派生類中必需改寫的成員(虛)函數(shù)。 2.2.3 運(yùn)用程序的初始化BOOL CHelloApp:InitInstance() m_pMainwnd=new CHelloFrame(); m_pMainwnd-ShowWind

9、ow(m_nCmdShow); m_pMainwnd-UpdateWindow(); 如今, 執(zhí)行的腳步到達(dá)pThread -Run(), 即調(diào)用CWinThread的Run函數(shù)。 Run函數(shù)主要是調(diào)用全局函數(shù)PeekMessage來(lái)檢查音訊隊(duì)列,假設(shè)有音訊那么調(diào)用成員函數(shù)PumpMessage泵送音訊,分配音訊給適當(dāng)?shù)奶幹煤瘮?shù)進(jìn)展處置。 2.2.4 音訊循環(huán)theApp /創(chuàng)建全局的運(yùn)用程序?qū)ο驛fxWinMain /入口函數(shù)AfxWinInit /GUI初始化InitInstance /初始化運(yùn)用程序?qū)嵗鼵reate()、 ShowWindow()、 UpdateWindow() /創(chuàng)建窗

10、口、顯示窗口、更新窗口Run() /音訊循環(huán),創(chuàng)建視圖對(duì)象并顯示Hello!AfxWinTerm /終了程序2.2.5 程序的啟動(dòng)、運(yùn)轉(zhuǎn)和退出2.3 運(yùn)用程序框架類及其主要成員函數(shù)運(yùn)用程序框架構(gòu)成:運(yùn)用程序類 + 邊框窗口類和視圖類或 對(duì)話框類和控件類2.3.1 運(yùn)用程序類 每個(gè)運(yùn)用程序都從類CWinApp派生出本人的運(yùn)用程序類,并定義一個(gè)全局對(duì)象theApp。該運(yùn)用程序類包含了Windows下MFC運(yùn)用程序的初始化、運(yùn)轉(zhuǎn)和終了過(guò)程。CWinApp類在MFC體系中的層次如以下圖所示。CObjectCCmdTargetCWinTreadCWinAppCWinApp的主要數(shù)據(jù)成員:m_pszApp

11、Name:指定了運(yùn)用程序稱號(hào)m_pMainWnd :指向主邊框窗口的指針m_lpCmdLine:指示一個(gè)以NULL結(jié)尾的字符串,指向運(yùn)用程序的命令行m_nCmdShow:指示最初如何顯示窗口CWinApp的主要成員函數(shù):InitInstance()函數(shù)用于初始化實(shí)例Run()函數(shù)用于處置音訊循環(huán)ExitInstance()函數(shù)使運(yùn)用程序退出OnIdle()函數(shù)用于空閑處置2.3.2 邊框窗口類和視圖類1. 主邊框窗口類 每個(gè)窗口型的運(yùn)用程序都有一個(gè)且只需一個(gè)主邊框窗口類CMainFrame。對(duì)于單文檔,它是從CFrameWnd類派生;對(duì)于多文檔,它是從CMDIFrameWnd類派生。 主邊框窗

12、口在屏幕上生成一個(gè)帶邊框的大小可調(diào)的桌面窗口,內(nèi)含一個(gè)大的空白任務(wù)區(qū)域稱為視圖,它專門擔(dān)任程序文檔數(shù)據(jù)的屏幕顯示和用戶對(duì)文檔的操作。主邊框窗口普通還含有菜單欄、工具欄和形狀欄。2. 子邊框窗口類 對(duì)于多文檔的窗口型運(yùn)用程序,在主邊框窗口內(nèi)還有一個(gè)或多個(gè)子邊框窗口,它由CChildFrame管理,是從CMDIChildWnd類派生。 子邊框窗口只能位于主邊框窗口內(nèi),子邊框窗口內(nèi)部完全被視圖占據(jù), 它不能有本人的菜單欄、工具欄和形狀欄。多個(gè)子邊框窗口與一個(gè)主邊框窗口共享一套菜單和工具欄。菜單和工具欄顯示的內(nèi)容與當(dāng)前活動(dòng)的子邊框窗口有關(guān)。 視圖由視圖類管理,有二種視圖類:無(wú)文檔/視圖構(gòu)造支持的運(yùn)用程

13、序,視圖類是直接從CWnd類派生有文檔/視圖構(gòu)造支持的運(yùn)用程序,視圖類是從CView或其派生類派生。3.視圖 視圖是邊框窗口內(nèi)的大片空白區(qū)域, 稱為客戶區(qū)或任務(wù)區(qū),擔(dān)任在屏幕上顯示程序的數(shù)據(jù),并接受用戶的操作。 邊框窗口類和視圖類在MFC體系中的層次如以下圖所示。CObjectCCmdTargetCWndCFrameWndCMDIFrameWndCMDIChildWndCViewCCtrlViewCScrollView4.邊框窗口類的主要成員函數(shù)Create、LoadFrame 用于創(chuàng)建邊框窗口PreCreateWindow 用于定制邊框窗口ShowWindow、UpdateWindow、De

14、stroyWindow 用于顯示、更新、銷毀邊框窗口GetActiveView、GetActiveDocument 用于獲得當(dāng)前活動(dòng)的視圖和文檔EnableDocking、DockControlBar 用于允許工具欄??亢痛_定詳細(xì)的停靠位置MDITile、MDICascade 用于平鋪、層疊一切子窗口MDIGetActive 獲得當(dāng)前活動(dòng)的子邊框窗口OnPaint 用于重繪屏幕5.視圖類的主要成員函數(shù) 視圖類用于程序的輸入和輸出,其主要成員函數(shù)都來(lái)自窗口基類CWnd,輸入方面主要是改寫鼠標(biāo)音訊處置函數(shù),輸出方面主要是改寫OnPaint函數(shù),以實(shí)現(xiàn)屏幕的數(shù)據(jù)顯示和屏幕重繪。 但在有文檔/視圖構(gòu)造

15、的程序中,OnPaint函數(shù)已被改寫好,它調(diào)用OnDraw函數(shù),因此代以O(shè)nDraw函數(shù)擔(dān)任文檔的數(shù)據(jù)顯示和屏幕重繪。此處改動(dòng)的目的是為了便于實(shí)現(xiàn)“所見(jiàn)即所得,即打印函數(shù)OnPrint也將調(diào)用OnDraw函數(shù),這樣就可以實(shí)現(xiàn)屏幕顯示與打印輸出是一致的。2.3.3 對(duì)話框類和控件類1.對(duì)話框類 對(duì)話框有兩種類型:對(duì)話框型運(yùn)用程序和暫時(shí)彈出式對(duì)話框,后者又可分為公用對(duì)話框、自定義對(duì)話框和屬性選項(xiàng)卡三種類型。 對(duì)話框和控件是Windows運(yùn)用程序的另一種常見(jiàn)窗口。對(duì)話框用于在屏幕上顯示一個(gè)帶標(biāo)題欄和邊框的窗口,內(nèi)部分布著各式各樣的多個(gè)控件??丶且环N特定類型的輸入輸出窗口,用于與用戶交互。對(duì)話框可有

16、可無(wú)菜單欄,但普通沒(méi)有工具欄和形狀欄。 對(duì)話框型運(yùn)用程序是Windows的一種常見(jiàn)程序類型,如計(jì)算器和Windows Media Player,本教材中的許多程序也是對(duì)話框型運(yùn)用程序。對(duì)話框型運(yùn)用程序的對(duì)話框類是直接從CDialog類派生的。2.控件類 控件是一種根本的圖形用戶界面單元,可用于輸入或輸出。一切控件都必需由相應(yīng)的父窗口類(對(duì)話框類或表單視圖類)管理。 MFC提供了大量的控件類,還可運(yùn)用第三方提供的ActiveX控件,以滿足用戶的各種需求。 MFC控件類可分為三類,一類是在Windows 3.x中就已支持的普通控件類,另一類是Windows 95 /NT/2000中支持的通用控件類

17、,這些控件類都以Ctrl結(jié)尾。第三類是后期參與的對(duì)普通控件類的補(bǔ)充,也是從普通控件類派生的,稱為附加控件類,適宜于某些特殊運(yùn)用。 通用控件類只能運(yùn)轉(zhuǎn)在Windows 95和/NT 3.51及后續(xù)版本。另外,對(duì)于某些通用控件類來(lái)說(shuō),運(yùn)用程序不能定義數(shù)據(jù)變量而只能創(chuàng)建控件對(duì)象。CObjectCCmdTargetCWndCDialogCCommonDialogCPropertyPageCEditCButtonCListBox 對(duì)話框類和控件類在MFC體系中的層次如以下圖所示。3.對(duì)話框類和控件類的主要成員函數(shù)OnInitDialog 初始化對(duì)話框DoModal 顯示模態(tài)對(duì)話框DoDataExchange 對(duì)話數(shù)據(jù)交換和數(shù)據(jù)驗(yàn)證GetDlgItem 獲得某控件的指針GetDlgItemInt、 SetDlgItemInt 獲取

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論