版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VC入門教程,從入門到精通 vc入門教程 一走進(jìn)VisualC+ 1理解VC工程 2MFC編程特點(diǎn) 3使用Wizard 二MFC程序結(jié)構(gòu)分析 1WINDOWS程序工作原理2建立應(yīng)用程序 3程序結(jié)構(gòu)剖析 31類CMYAPP 32類CMAINFRAME 33類CMyView與CMyDoc三深入MFC類庫(kù) 1處理用戶輸入 11定義對(duì)話框資源 12定義對(duì)話框類 2有關(guān)屏幕輸出 21設(shè)備上下文工作原理 22實(shí)例繪圖原理剖析 23繪圖操作實(shí)現(xiàn) 24有關(guān)屏幕映射方式 3文件處理 31對(duì)象持續(xù)化簡(jiǎn)述 32實(shí)例分析 33與文件處理關(guān)系密切的類CFile4DAO技術(shù) 41DAO與ODBC 42使用MFC實(shí)現(xiàn)DAO
2、技術(shù) 5打印 5.1打印和顯示 5.2打印分頁(yè) 5.3打印工作的開始和結(jié)束 5.4打印程序?qū)嵗?四、VC程序調(diào)試 11調(diào)試環(huán)境的建立 12調(diào)試的一般過(guò)程 13如何設(shè)置斷點(diǎn) 14控制程序的運(yùn)行 15查看工具的使用 2高級(jí)調(diào)試技術(shù) 2.1TRACE宏的利用 2.2ASSERT宏的利用 2.3ASSERT_VALID宏的利用以及類的AssertValid()成員函的重載 2.4對(duì)象的DUMP函數(shù)的利用 3內(nèi)存漏洞的檢查 五VisualC+與多媒體 1對(duì)聲音的處理 11媒體控制接口 12波形混音器 2多媒體文件I/O 3多媒體圖形圖像技術(shù); 4圖像合成; 5FLC動(dòng)畫; 6熱點(diǎn); 一走進(jìn)VisualC
3、+ VisualC+作為一個(gè)功能非常強(qiáng)大的可視化應(yīng)用程序開發(fā)工具,是計(jì)算機(jī)界公認(rèn)的最優(yōu)秀的應(yīng)用開發(fā)工具之一。Microsoft的基本類庫(kù)MFC使得開發(fā)Windows應(yīng)用程序比以往任何時(shí)候都要容易。本光盤教學(xué)軟件的目的就是為了讓你學(xué)會(huì)在VisualC+環(huán)境下,利用微軟的基本類庫(kù)MFC開發(fā)出功能強(qiáng)大的Windows應(yīng)用程序。在本章節(jié)的內(nèi)容當(dāng)中,我們將向您介紹使用VC開發(fā)軟件需要用到的一些基本概念,使用MFC進(jìn)行編程的基本特點(diǎn),以及VISUALC+集成開發(fā)環(huán)境提供的一系列編程輔助工具WIZARD的使用方法。1理解VC工程 VisualC+作為一種程序設(shè)計(jì)語(yǔ)言,它同時(shí)也是一個(gè)集成開發(fā)工具,提供了軟件代
4、碼自動(dòng)生成和可視化的資源編輯功能。在使用VisualC+開發(fā)應(yīng)用程序的過(guò)程中,系統(tǒng)為我們生成了大量的各種類型的文件,在本節(jié)中將要詳細(xì)介紹VisualC+中這些不同類型的文件分別起到什么樣的作用,在此基礎(chǔ)上對(duì)VisualC+如何管理應(yīng)用程序所用到的各種文件有一個(gè)全面的認(rèn)識(shí)。 首先要介紹的是擴(kuò)展名為dsw的文件類型,這種類型的文件在VC中是級(jí)別最高的,稱為Workspace文件。在VC中,應(yīng)用程序是以Project的形式存在的,Project文件以.dsp擴(kuò)展名,在Workspace文件中可以包含多個(gè)Project,由Workspace文件對(duì)它們進(jìn)行統(tǒng)一的協(xié)調(diào)和管理。 與dsw類型的Workspa
5、ce文件相配合的一個(gè)重要的文件類型是以opt為擴(kuò)展名的文件,這個(gè)文件中包含的是在Workspace文件中要用到的本地計(jì)算機(jī)的有關(guān)配置信息,所以這個(gè)文件不能在不同的計(jì)算機(jī)上共享,當(dāng)我們打開一個(gè)Workspace文件時(shí),如果系統(tǒng)找不到需要的opt類型文件,就會(huì)自動(dòng)地創(chuàng)建一個(gè)與之配合的包含本地計(jì)算機(jī)信息的opt文件。 上面提到Project文件的擴(kuò)展名是dsp,這個(gè)文件中存放的是一個(gè)特定的工程,也就是特定的應(yīng)用程序的有關(guān)信息,每個(gè)工程都對(duì)應(yīng)有一個(gè)dsp類型的文件。 以clw為擴(kuò)展名的文件是用來(lái)存放應(yīng)用程序中用到的類和資源的信息的,這些信息是VC中的ClassWizard工具管理和使用類的信息來(lái)源。
6、對(duì)應(yīng)每個(gè)應(yīng)用程序有一個(gè)readme.txt文件,這個(gè)文件中列出了應(yīng)用程序中用到的所有的文件的信息,打開并查看其中的內(nèi)容就可以對(duì)應(yīng)用程序的文件結(jié)構(gòu)有一個(gè)基本的認(rèn)識(shí)。在應(yīng)用程序中大量應(yīng)用的是以h和cpp為擴(kuò)展名的文件,以h為擴(kuò)展名的文件稱為頭文件。以cpp為擴(kuò)展名的文件稱為實(shí)現(xiàn)文件,一般說(shuō)來(lái)h為擴(kuò)展名的文件與cpp為擴(kuò)展名的文件是一一對(duì)應(yīng)配合使用的,在h為擴(kuò)展名的文件中包含的主要是類的定義,而在cpp為擴(kuò)展名的文件中包含的主要是類成員函數(shù)的實(shí)現(xiàn)代碼。 在應(yīng)用程序中經(jīng)常要使用一些位圖、菜單之類的資源,VC中以rc為擴(kuò)展名的文件稱為資源文件,其中包含了應(yīng)用程序中用到的所有的windows資源,要指出的
7、一點(diǎn)是rc文件可以直接在VC集成環(huán)境中以可視化的方法進(jìn)行編輯和修改。 最后要介紹的是以rc2為擴(kuò)展名的文件,它也是資源文件,但這個(gè)文件中的資源不能在VC的集成環(huán)境下直接進(jìn)行編輯和修改,而是由我們自己根據(jù)需要手工地編輯這個(gè)文件。 對(duì)于以ico,bmp等為擴(kuò)展名的文件是具體的資源,產(chǎn)生這種資源的途徑很多。使用rc資源文件的目的就是為了對(duì)程序中用到的大量的資源進(jìn)行統(tǒng)一的管理。 2MFC編程特點(diǎn) 如果你曾經(jīng)使用過(guò)傳統(tǒng)的windows編程方法開發(fā)應(yīng)用程序,你會(huì)深刻地體會(huì)到,即使是開發(fā)一個(gè)簡(jiǎn)單的windows應(yīng)用程序也需要對(duì)windows的編程原理有很深刻的認(rèn)識(shí),同時(shí)也要手工編寫很多的代碼。因?yàn)槌绦虻某鲥e(cuò)
8、率幾乎是隨著代碼長(zhǎng)度的增加呈幾何級(jí)數(shù)增長(zhǎng)的,這就使得調(diào)試程序變得非常困難。所以傳統(tǒng)的windows編程是需要極大的耐心和豐富的編程經(jīng)驗(yàn)的。 近幾年來(lái),面向?qū)ο蠹夹g(shù)無(wú)論是在理論還是實(shí)踐上都在飛速地發(fā)展。面向?qū)ο蠹夹g(shù)中最重要的就是“對(duì)象”的概念,它把現(xiàn)實(shí)世界中的氣球、自行車等客觀實(shí)體抽象成程序中的“對(duì)象”。這種“對(duì)象”具有一定的屬性和方法,這里的屬性指對(duì)象本身的各種特性參數(shù)。如氣球的體積,自行車的長(zhǎng)度等,而方法是指對(duì)象本身所能執(zhí)行的功能,如氣球能飛,自行車能滾動(dòng)等。一個(gè)具體的對(duì)象可以有許多的屬性和方法,面向?qū)ο蠹夹g(shù)的重要特點(diǎn)就是對(duì)象的封裝性,對(duì)于外界而言,并不需要知道對(duì)象有哪些屬性,也不需要知道對(duì)
9、象本身的方法是如何實(shí)現(xiàn)的,而只需要調(diào)用對(duì)象所提供的方法來(lái)完成特定的功能。從這里我們可以看出,當(dāng)把面向?qū)ο蠹夹g(shù)應(yīng)用到程序設(shè)計(jì)中時(shí),程序員只是在編寫對(duì)象方法時(shí)才需要關(guān)心對(duì)象本身的細(xì)節(jié)問(wèn)題,大部分的時(shí)間是放在對(duì)對(duì)象的方法的調(diào)用上,組織這些對(duì)象進(jìn)行協(xié)同工作。 MFC的英文全稱是MicrosoftFundationClasses,即微軟的基本類庫(kù),MFC的本質(zhì)就是一個(gè)包含了許多微軟公司已經(jīng)定義好的對(duì)象的類庫(kù),我們知道,雖然我們要編寫的程序在功能上是千差萬(wàn)別的,但從本質(zhì)上來(lái)講,都可以化歸為用戶界面的設(shè)計(jì),對(duì)文件的操作,多媒體的使用,數(shù)據(jù)庫(kù)的訪問(wèn)等等一些最主要的方面。這一點(diǎn)正是微軟提供MFC類庫(kù)最重要的原因
10、,在這個(gè)類庫(kù)中包含了一百多個(gè)程序開發(fā)過(guò)程中最常用到的對(duì)象。在進(jìn)行程序設(shè)計(jì)的時(shí)候,如果類庫(kù)中的某個(gè)對(duì)象能完成所需要的功能,這時(shí)我們只要簡(jiǎn)單地調(diào)用已有對(duì)象的方法就可以了。我們還可以利用面向?qū)ο蠹夹g(shù)中很重要的“繼承”方法從類庫(kù)中的已有對(duì)象派生出我們自己的對(duì)象,這時(shí)派生出來(lái)的對(duì)象除了具有類庫(kù)中的對(duì)象的特性和功能之外,還可以由我們自己根據(jù)需要加上所需的特性和方法,產(chǎn)生一個(gè)更專門的,功能更為強(qiáng)大的對(duì)象。當(dāng)然,你也可以在程序中創(chuàng)建全新的對(duì)象,并根據(jù)需要不斷完善對(duì)象的功能。正是由于MFC編程方法充分利用了面向?qū)ο蠹夹g(shù)的優(yōu)點(diǎn),它使得我們編程時(shí)極少需要關(guān)心對(duì)象方法的實(shí)現(xiàn)細(xì)節(jié),同時(shí)類庫(kù)中的各種對(duì)象的強(qiáng)大功能足以完成
11、我們程序中的絕大部分所需功能,這使得應(yīng)用程序中程序員所需要編寫的代碼大為減少,有力地保證了程序的良好的可調(diào)試性。 最后要指出的是MFC類庫(kù)在提供的對(duì)象的各種屬性和方法都是經(jīng)過(guò)謹(jǐn)慎的編寫和嚴(yán)格的測(cè)試,可靠性很高,這就保證了使用MFC類庫(kù)不會(huì)影響程序的可靠性和正確性。3使用Wizard VisualC+是一種功能強(qiáng)大的通用程序設(shè)計(jì)語(yǔ)言,它提供了各種向?qū)Ш凸ぞ邘椭覀儊?lái)實(shí)現(xiàn)所需的功能,在一定程度上實(shí)現(xiàn)了軟件的自動(dòng)生成和可視化編程。下面就為你介紹VC集成環(huán)境中幾個(gè)最主要的開發(fā)工具的使用方法。 首先要介紹的是Appwizard工具,這個(gè)工具的作用是幫助我們一步步地生成一個(gè)新的應(yīng)用程序,并且自動(dòng)生成應(yīng)用程
12、序所需的基本代碼。下面我們就介紹使用Appwizard生成一個(gè)應(yīng)用程序的具體步驟。 單擊File菜單New菜單項(xiàng),系統(tǒng)彈出的對(duì)話讓我們選擇所要?jiǎng)?chuàng)建的文件類型,這里的文件分成了Files,Project,Workspaces,Otherdocuments四種大類型,每一個(gè)類型下面又包含許多具體的文件類型,選中Projects標(biāo)簽,標(biāo)簽下的工作區(qū)中列出的是各種不同的應(yīng)用程序類型,比如dll類型的動(dòng)態(tài)鏈接庫(kù),exe類型的可執(zhí)行程序等,這里選中MFCAppwizard(exe)選項(xiàng),表示要?jiǎng)?chuàng)建的是一個(gè)使用MFC基本類 庫(kù)進(jìn)行編程的可執(zhí)行程序。如下圖1.1所示: 圖1.1 選好后在projectname
13、一欄中為程序起一個(gè)名字為test,在location一欄中為程序定義文件存放的目錄,對(duì)話框右下角的platforms一欄中的Win32項(xiàng)表示要?jiǎng)?chuàng)建的程序是建立在32位的windows平臺(tái)基礎(chǔ)上。單擊按鈕,就啟動(dòng)了使用方式開發(fā)應(yīng)用程序的Appwizard功能。 圖1.2 Wizard讓我們選擇程序的類型和程序中的資源所用的語(yǔ)種,這里不妨選擇程序類型為單文檔界面,語(yǔ)種為英語(yǔ),然后單擊按鈕。 圖1.3 Wizard讓我們選擇是否需要提供數(shù)據(jù)庫(kù)方面的支持,這里選擇NONE,然后單擊NEXT按鈕。 圖1.4 下面選擇程序中對(duì)復(fù)合文檔的支持,這里選擇NONE。 圖1.5 接著選擇程序的其它一些特性,如提供
14、對(duì)WINSOCK的支持等。這里對(duì)系統(tǒng)的缺省值不作改變,如下圖1.6所示。單擊NEXT按鈕。 圖1.6 在第五步中,對(duì)話框上部選擇是否為程序自動(dòng)生成注釋,對(duì)話框的下部用來(lái)選擇使用MFC類庫(kù)的方式是動(dòng)態(tài)鏈接庫(kù)方式還是靜態(tài)鏈接方式,使用動(dòng)態(tài)鏈接庫(kù)方式時(shí)在以后生成的可執(zhí)行應(yīng)用程序中并不真正包含MFC類庫(kù)中的對(duì)象,而使用靜態(tài)鏈接方式時(shí),則把MFC庫(kù)中的代碼生成為應(yīng)用程序的一部分,這時(shí)生成的應(yīng)用程序也就相對(duì)大一些。選好后單擊NEXT按鈕。 圖1.7 進(jìn)入APPWIZARD的最后一個(gè)步驟,對(duì)話框中的提示信息指明了系統(tǒng)將要自動(dòng)創(chuàng)建的對(duì)象 和相關(guān)文件,以及派生出這些對(duì)象的MFC的基類等內(nèi)容。在這一步當(dāng)中,我們還
15、可以對(duì)視圖類的基類進(jìn)行選擇,單擊FINISH按鈕。 圖1.8 游覽一下對(duì)話框中對(duì)將要生成的程序的有關(guān)信息的描述后單擊OK按鈕。系統(tǒng)就自動(dòng)為我們生成一個(gè)使用MFC基本類庫(kù)的應(yīng)用程序的基本框架,在以后將會(huì)對(duì)這個(gè)框架的內(nèi)容作詳細(xì)的介紹。 圖1.9 接下來(lái)介紹VC集成環(huán)境中提供的一個(gè)很重要的工具CLASSWIZARD,它主要是用來(lái)管理程序中的對(duì)象和消息的,這個(gè)工具對(duì)于MFC編程顯得尤為重要。單擊VIEW菜單的CLASSWIZARD項(xiàng),就可以運(yùn)行MFCCLASSWIZARD,在這個(gè)對(duì)話框中就可以對(duì)程序中的對(duì)象和消息進(jìn)行管理了。 圖1.10 在對(duì)話框中的MESSAGEMAPS標(biāo)簽下,PROJECT欄中的內(nèi)
16、容代表當(dāng)前程序的名字。CLASSWNAME下拉列表框列出的就是程序當(dāng)前用到的所有類的名字,在MESSAGE一欄中列出的就是一個(gè)選中的類所能接收到的所有的消息,在WINDOWS程序設(shè)計(jì)中,消息是個(gè)極為重要的概念,用戶通過(guò)窗口界面的各種操作最后都轉(zhuǎn)化為發(fā)送到程序中的對(duì)象的各種消息,下面就向您介紹在WINDOWS程序設(shè)計(jì)中最常用的一些消息: 1窗口消息:WM_CREATE,WM_DESTROY,WM_CLOSE 我們創(chuàng)建一個(gè)窗口對(duì)象的時(shí)候,這個(gè)窗口對(duì)象在創(chuàng)建過(guò)程中收到的就是WM_CREATE消息,對(duì)這個(gè)消息的處理過(guò)程一般用來(lái)設(shè)置一些顯示窗口前的初始化工作,如設(shè)置窗口的大小,背景顏色等,WM_DEST
17、ROY消息指示窗口即將要被撤消,在這個(gè)消息處理過(guò)程中,我們就可以做窗口撤消前的一些工作。WM_CLOSEwm_close消息發(fā)生在窗口將要被關(guān)閉之前,在收到這個(gè)消息后,一般性的操作是回收所有分配給這個(gè)窗口的各種資源。在windows系統(tǒng)中資源是很有限的,所以回收資源的工作還是非常重要的。 2鍵盤消息:WM_CHAR,WM_KEYDOWN,WM_KEYUP 這三個(gè)消息用來(lái)處理用戶的鍵盤數(shù)據(jù),當(dāng)用戶在鍵盤上按下某個(gè)鍵的時(shí)候,會(huì)產(chǎn)生WM_KEYDOWN消息,釋放按鍵的時(shí)候又回產(chǎn)生WM_KEYUP消息,所以WM_KEYDOWN與WM_KEYUP消息一般總是成對(duì)出現(xiàn)的,至于WM_CHAR消息是在用戶的鍵
18、盤輸入能產(chǎn)生有效的ASCII碼時(shí)才會(huì)發(fā)生。這里特別提醒要注意前兩個(gè)消息與 WM_CHAR消息在使用上是有區(qū)別的。在前兩個(gè)消息中,伴隨消息傳遞的是按鍵的虛擬鍵碼,所以這兩個(gè)消息可以處理非打印字符,如方向鍵,功能鍵等。而伴隨WM_CHAR消息的參數(shù)是所按的鍵的ASCII碼,ASCII碼是可以區(qū)分字母的大小寫的。而虛擬鍵碼是不能區(qū)分大小寫的。 3鼠標(biāo)消息:WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBCLICK,WM_RBUTTONDOWN,WM_RBUTTONUP,WM_RBUTTONDBCLICK 這組消息是與鼠標(biāo)輸入相關(guān)的,WM_MO
19、USEMOVE消息發(fā)生在鼠標(biāo)移動(dòng)的時(shí)候,剩余的六個(gè)消息則分別對(duì)應(yīng)于鼠標(biāo)左右鍵的按下、釋放、雙擊事件,要指出的是WINDOWS系統(tǒng)并不是在鼠標(biāo)每移動(dòng)一個(gè)像素時(shí)都產(chǎn)生MOUSEMOVE消息,這一點(diǎn)要特別注意。4另一組窗口消息:WM_MOVE,WM_SIZE,WM_PAINT 當(dāng)窗口移動(dòng)的時(shí)候產(chǎn)生WM_MOVE消息,窗口的大小改變的時(shí)候產(chǎn)生WM_SIZE消息,而當(dāng)窗口工作區(qū)中的內(nèi)容需要重畫的時(shí)候就會(huì)產(chǎn)生WM_PAINT消息。 5焦點(diǎn)消息WM_SETFOCUS,WM_KILLFOCUS 當(dāng)一個(gè)窗口從非活動(dòng)狀態(tài)變?yōu)榫哂休斎虢裹c(diǎn)的活動(dòng)狀態(tài)的時(shí)候,它就會(huì)收到 WM_SETFOCUS消息,而當(dāng)窗口失去輸入焦點(diǎn)
20、的時(shí)候它就會(huì)收到WM_KILLFOCUS消息。 6定時(shí)器消息:WM_TIMER 當(dāng)我們?yōu)橐粋€(gè)窗口設(shè)置了定時(shí)器資源之后,系統(tǒng)就會(huì)按規(guī)定的時(shí)間間隔向窗口發(fā)送WM_TIMER消息,在這個(gè)消息中就可以處理一些需要定期處理的事情。 最后要指出的一點(diǎn)是,在WINDOWS環(huán)境下,消息的來(lái)源是多方面的,最常見的是用戶的操作產(chǎn)生消息,系統(tǒng)在必要的時(shí)候也會(huì)向程序發(fā)送系統(tǒng)消息,其他在運(yùn)行中的程序也可以向程序發(fā)送消息。此外,在程序的內(nèi)部,也可以根據(jù)需要在適當(dāng)?shù)臅r(shí)候主動(dòng)產(chǎn)生消息,比如主動(dòng)產(chǎn)生WM_PAINT消息以實(shí)現(xiàn)需要的重畫功能。 上面介紹了MESSAGE欄中主要的消息,在MEMBERFUNCTION一欄中列出的是目
21、前被選中的類已經(jīng)有的成員函數(shù)。這些成員函數(shù)一般說(shuō)來(lái)是與這個(gè)類可以接收的消息一一對(duì)應(yīng)的。也就是說(shuō),一個(gè)成員函數(shù)一般總是用來(lái)處理某個(gè)特定的消息。如果在MESSAGE欄中的某個(gè)消息在程序中需要處理,但目前還沒有相應(yīng)的類成員函數(shù),比如這里選中WM_TIMER這個(gè)消息,它目前還沒有相應(yīng)的對(duì)應(yīng)的類的成員函數(shù), 單擊ADDFUNCTION按鈕, 圖1.11 系統(tǒng)就自動(dòng)為WM_TIMER消息在類中添加了對(duì)應(yīng)的成員函數(shù)ONTIMER,單擊 EDITCODE按鈕,可以發(fā)現(xiàn)系統(tǒng)已經(jīng)自動(dòng)生成了完成ONTIMER函數(shù)所需的基本代碼,我們只要在這些基本代碼的基礎(chǔ)上再添加所需要的代碼就可以了。 注意對(duì)話框中的ADDCLAS
22、S按鈕,它用來(lái)往當(dāng)前應(yīng)用程序中添加一個(gè)新的類。單擊后選中NEW菜單, 圖1.12 系統(tǒng)彈出了NEWCLASS對(duì)話框用于生成一個(gè)新的類。在這個(gè)對(duì)話框中需要為類起個(gè)名字,設(shè)置類文件的名字,另外還要在BASECLASS一欄的下拉列表框中選擇某個(gè)已有的類作為基類,設(shè)好需要的信息后單擊OK就生成了一個(gè)新的類。 圖1.13 CLASSWIZARD還有一些很強(qiáng)大的功能,這里就不再詳細(xì)介紹,你會(huì)在不斷的學(xué)習(xí)中慢慢地了解和掌握。 最后介紹一下集成環(huán)境提供的一個(gè)重要工具RESOUCREDITOR,也就是資源編輯器。在VC開發(fā)的應(yīng)用程序中要用到大量的位圖,菜單,工具條,對(duì)話框等各種資源。這些資源對(duì)于程序而言是相對(duì)獨(dú)
23、立的,所以可以對(duì)它們進(jìn)行單獨(dú)的編輯,然后使用在程序中。而RESOUCEEDITOR正是為編輯資源提供了一種可視化的開發(fā)方法。極大地減輕了程序員的負(fù)擔(dān)。 單擊FILE菜單的OPEN菜單項(xiàng),然后在對(duì)話框中選擇打開TEST.RC文件,就可以開始使用資源編輯器了。在左邊的工作區(qū)中按類型列出了程序中用到的所有的資源,雙擊其中的某個(gè)類型,比如雙擊MENU資源,MENU目錄的下面列出的就是系統(tǒng)已經(jīng)有的MENU類型的資源,選中其中一個(gè)并雙擊,在右邊的工作區(qū)中列出了這個(gè)資源當(dāng)前的樣子,我們就可以在工作區(qū)中對(duì)資源進(jìn)行可視化的編輯和修改了。 圖1.14 如何添加一個(gè)資源呢?單擊INSERT菜單,選中RESOURCE
24、菜單項(xiàng),系統(tǒng)彈出INSERTRESOURCE對(duì)話框。如圖1.15。 圖1.15 在圖1.15這個(gè)對(duì)話框,在這個(gè)對(duì)話框中選中一種資源類型,比如選擇CURSOR類型,然后單擊NEW按鈕。在左邊的工作區(qū)中就出現(xiàn)了我們新生成的資源的標(biāo)識(shí)符,雙擊這個(gè)標(biāo)識(shí)符,在右邊的工作區(qū)中就可以對(duì)這個(gè)新的指針形狀資源進(jìn)行可視化編輯了。如圖1.16。通過(guò)這部分內(nèi)容的介紹,相信您已經(jīng)對(duì)使用VISUALC+開發(fā)MFC應(yīng)用程序的圖1.16 基本步驟有了認(rèn)識(shí)。在下一章的內(nèi)容當(dāng)中,我們將結(jié)合WINDOWS的工作原理,詳細(xì)地向您解釋MFC類庫(kù)的基本結(jié)構(gòu),以及MFC應(yīng)用程序的基本框架文檔/視圖結(jié)構(gòu)。二MFC程序結(jié)構(gòu)分析 1WINDOW
25、S程序工作原理 WINDOWS程序設(shè)計(jì)是一種完全不同于傳統(tǒng)的DOS方式的程序設(shè)計(jì)方法,它是一種事件驅(qū)動(dòng)方式的程序設(shè)計(jì)模式。在程序提供給用戶的界面中有許多可操作的可視對(duì)象。用戶從 所有可能的操作中任意選擇,被選擇的操作會(huì)產(chǎn)生某些特定的事件,這些事件發(fā)生后的結(jié)果是向程序中的某些對(duì)象發(fā)出消息,然后這些對(duì)象調(diào)用相應(yīng)的消息處理函數(shù)來(lái)完成特定的操作。WINDOWS應(yīng)用程序最大的特點(diǎn)就是程序沒有固定的流程,而只是針對(duì)某個(gè)事件的處理有特定的子流程,WINDOWS應(yīng)用程序就是由許多這樣的子流程構(gòu)成的。 從上面的討論中可以看出,WINDOWS應(yīng)用程序在本質(zhì)上是面向?qū)ο蟮?。程序提供給用戶界面的可視對(duì)象在程序的內(nèi)部一
26、般也是一個(gè)對(duì)象,用戶對(duì)可視對(duì)象的操作通過(guò)事件驅(qū)動(dòng)模式觸發(fā)相應(yīng)對(duì)象的可用方法。程序的運(yùn)行過(guò)程就是用戶的外部操作不斷產(chǎn)生事件,這些事件又被相應(yīng)的對(duì)象處理的過(guò)程。下面是WINDOWS程序工作原理的示意圖。 2建立應(yīng)用程序 在介紹AppWizard的時(shí)候,我們已經(jīng)建立了一個(gè)名字為TEST的工程,事實(shí)上這個(gè)框架程序已經(jīng)可以編譯運(yùn)行了。在BUILD菜單中選擇REBUILDALL菜單項(xiàng),系統(tǒng)開始編譯由APPWIZARD自動(dòng)生成的程序框架中所有文件中的源代碼,并且鏈接生成可執(zhí)行的應(yīng)用程序。在BUILD菜單中選擇EXECUTE菜單項(xiàng),應(yīng)用程序就開始開始運(yùn)行了,雖然我們沒有編寫一行代碼,但是可以看出由系統(tǒng)自動(dòng)生成
27、的應(yīng)用程序的界面已經(jīng)有了一個(gè)標(biāo)準(zhǔn) WINDOWS應(yīng)用程序所需的幾個(gè)組成部分,我們要做的事情是往這個(gè)應(yīng)用程序添加必要的代碼以完成我們所需要的功能。 接下來(lái)將要對(duì)WINDOWS自動(dòng)生成的這個(gè)應(yīng)用程序框架作詳細(xì)的介紹,讓你對(duì)MFC方式的WINDOWS應(yīng)用程序的工作原理有全面的認(rèn)識(shí),只有這樣你才會(huì)知道應(yīng)該如何往程序框架當(dāng)中添加需要的代碼。 圖2.1 3程序結(jié)構(gòu)剖析 為了讓您對(duì)MFC方式的程序的框架有一個(gè)總體的認(rèn)識(shí),這里設(shè)計(jì)了一個(gè)表示程序中的主要類之間的關(guān)系的圖表: 這個(gè)圖表表示了使用MFC方式的應(yīng)用程序的四個(gè)主要類之間的關(guān)系,從中可以看出,CMYAPP類主要的作用是用來(lái)處理消息的,它統(tǒng)一管理程序收到的
28、所有的消息,然后把消息分配到相應(yīng)的對(duì)象。CMAINFRAME是CMYVIEW的父類,也就是說(shuō)視窗VIEW顯示在主框窗MAINFRAME的客戶區(qū)中。類CMYVIEW的作用是顯示數(shù)據(jù),而數(shù)據(jù)的來(lái)源是類CMYDOC,在MFC程序中,程序的數(shù)據(jù)是放在文檔當(dāng)中的,而顯示數(shù)據(jù)則是利用視窗方式,文檔與視窗分離帶來(lái)的好處就是一個(gè)文檔可以同時(shí)具有多個(gè)視窗,每個(gè)視窗只顯示文檔中的一部分?jǐn)?shù)據(jù),或者以特定的風(fēng)格顯示文檔中的數(shù)據(jù)。文檔與視窗分離的另一個(gè)好處就是在程序中可以處理多個(gè)文檔,通過(guò)對(duì)不同的視窗的處理達(dá)到對(duì)不同的文檔分別處理的目的。 使用過(guò)傳統(tǒng)的WINDOWS編程方法的人都知道,在應(yīng)用程序中有一個(gè)重要的函數(shù) WI
29、NMAIN(),這個(gè)函數(shù)是應(yīng)用程序的基礎(chǔ),用戶的操作所產(chǎn)生的消息正是經(jīng)過(guò)這個(gè)函數(shù)的處理派送到對(duì)應(yīng)的對(duì)象中進(jìn)行處理。在MFC方式的WINDOWS應(yīng)用程序中,用來(lái)處理消息的是系統(tǒng)自動(dòng)生成的MFC中的類CWINAPP的派生類CMYAPP,下面就從這個(gè)類開始介紹應(yīng)用程序的框架。 31類CMYAPP 類CMYAPP是應(yīng)用程序運(yùn)行的基礎(chǔ),注意這一行代碼,可以看出這個(gè)類是由MFC中的類CWINAPP派生來(lái)的。在這個(gè)類中除了有一般類都有的構(gòu)造函數(shù),一個(gè)重要的成員函數(shù)就 是INITINSTANCE,我們知道,在WINDOWS環(huán)境下面可以運(yùn)行同一程序的多個(gè)實(shí)例,函數(shù)INITINSTANCE的作用就是在生成的一個(gè)新
30、的實(shí)例的時(shí)候,完成一些初始化的工作。注意這一行代碼,它的作用就是生成一個(gè)CMYAPP類型的對(duì)象,生成的時(shí)候系統(tǒng)會(huì)主動(dòng)調(diào)用INITINSTANCE函數(shù)完成一些必要的初始化工作。 下面研究INITINSTANCE函數(shù)所做的事情,注意這一行代碼,它定義了一個(gè)文檔模板對(duì)象指針PDOCTEMPLATE,通過(guò)NEW操作符,系統(tǒng)動(dòng)態(tài)生成了這個(gè)文檔模板對(duì)象,然后使用ADDDOCTEMPLATE函數(shù)把這個(gè)文檔模板對(duì)象加入到應(yīng)用程序所維護(hù)的文檔模板鏈表當(dāng)中,這個(gè)文檔模板PDOCTEMPLATE的作用就是把程序用到的框架窗口, CMAINFRAME,文檔CMYDOC,視窗CMYVIEW與應(yīng)用對(duì)象CMYAPP聯(lián)系起來(lái)
31、。CMYAPP類提供了用戶與WINDOWS應(yīng)用程序之間進(jìn)行交流的界面。在生成這個(gè)類的對(duì)象后,這個(gè)對(duì)象自動(dòng)地把自身與WINDOWS系統(tǒng)建立聯(lián)系,接收WINDOWS傳送的消息,并交給程序中相應(yīng)的對(duì)象去處理,這就免去了程序員許多的工作,使得開發(fā)C+的WINDOWS程序變得簡(jiǎn)單方便。 32類CMAINFRAME 類CMAINFRAME是由MFC中的CFRAMEWND派生來(lái)的,所以它也是一個(gè)框架窗口。前面已經(jīng)指出,CMAINFRAME是類CMYVIEW的父類,也就是說(shuō)CMYVIEW類的對(duì)象顯示在主框架窗口的客戶區(qū)中。在類CMAINFRAME中,系統(tǒng)已經(jīng)從類CFRAMEWND那里繼承了處理窗口的一般事件的
32、WINDOWS消息,比如改變窗口的大小,窗口最小化等等的成員函數(shù),因此編程的時(shí)候程序員不需要再關(guān)心此類消息的處理,從而減輕了程序員的負(fù)擔(dān)。當(dāng)然,如果確實(shí)需要重新編寫處理此類消息的成員函數(shù),則需要對(duì)原有的成員函數(shù)進(jìn)行重載。 在MFC程序中,我們并不需要經(jīng)常對(duì)CMAINFRAME類進(jìn)行操作,更多的是對(duì)視窗類進(jìn)行操作,達(dá)到對(duì)程序中的數(shù)據(jù)進(jìn)行編輯和修改的目的。 最后要指出的是,在MFC方式的程序中,當(dāng)程序的一個(gè)實(shí)例被運(yùn)行的時(shí)候,系統(tǒng)根據(jù)前面在CMYAPP類中介紹的文檔模板對(duì)象自動(dòng)生成類CMAINFRAME,CMYVIEW,CMYDOC的對(duì)象,而不需要程序員主動(dòng)地去創(chuàng)建這些類的對(duì)象。 33類CMyVie
33、w與CMyDoc 之所以把CMyView類和CMyDoc類一起介紹是因?yàn)檫@兩個(gè)類是密切相關(guān)的, 下面的框圖可以說(shuō)明文檔與視窗的關(guān)系。 在這個(gè)框圖當(dāng)中,文檔是由文檔模板對(duì)象生成的,并由應(yīng)用程序?qū)ο蠊芾?,而用戶則是通過(guò)與文檔相聯(lián)系的視窗對(duì)象來(lái)存儲(chǔ)、管理應(yīng)用程序的數(shù)據(jù),用戶與文檔之間的交互則是通過(guò)與文檔相關(guān)聯(lián)的視窗對(duì)象來(lái)進(jìn)行的。 生成一個(gè)新的文檔的時(shí)候,MFC程序同時(shí)生成一個(gè)框架窗口,并且在框架窗口的客戶區(qū)中生成一個(gè)視窗對(duì)象作為框架窗口的子窗口,這個(gè)子窗口以可視化的方式表現(xiàn)文檔中的內(nèi)容。視窗的重要功能就是負(fù)責(zé)處理用戶的鼠標(biāo)、鍵盤等操作,通過(guò)對(duì)視窗對(duì)象的處理達(dá)到處理文檔對(duì)象的目的。 要指出的一點(diǎn)是,W
34、INDOWS應(yīng)用程序分單文檔界面SDI和多文檔界面MDI兩種,在單文檔界面中,文檔窗口與主框架窗口是同一概念。而這時(shí)的視窗對(duì)象則是顯示在文檔窗口的客戶區(qū)當(dāng)中。我們先前生成的TEST程序使用的就是單文檔界面方式,此時(shí)文檔窗口是主框架窗口,即類CMAINFRAME的對(duì)象。 下面將以一個(gè)例子來(lái)說(shuō)明這兩個(gè)類之間的關(guān)系。 前面已經(jīng)提到,文檔類是用來(lái)存放程序中的數(shù)據(jù)的,所以我們首先在文檔類CMyDoc中加入一個(gè)成員變量用來(lái)存放數(shù)據(jù)。 在左邊的工作區(qū)用右鍵單擊CMyDoc選項(xiàng),在彈出的菜單中選中Addmembervariable菜單項(xiàng)。 圖2.2 系統(tǒng)彈出AddMemberVariable對(duì)話框。Varia
35、bleType一欄用來(lái)輸入成員變量的類型。這里設(shè)置為CString,即字符串類型,VariableDeclaration一欄用來(lái)輸入變量的名字,這里不妨輸入為mystring,Access組合框用來(lái)設(shè)置成員變量的訪問(wèn)權(quán)限,缺省為Public,設(shè)好后單擊OK按鈕關(guān)閉對(duì)話框。如下圖2.3所示: 圖2.3 這時(shí),如果打開類CMyDoc的頭文件、可以發(fā)現(xiàn)其中已經(jīng)自動(dòng)加入了我們定義的公有變量mystring。這個(gè)變量就可以作為我們的文檔類的數(shù)據(jù)存儲(chǔ)空間,因?yàn)閙ystring是公有成員,它就可以被文檔對(duì)應(yīng)的視窗所處理了。 在VIEW菜單中選擇ClassWizard菜單項(xiàng),系統(tǒng)打開MFCClassWizar
36、d對(duì)話框,接下來(lái)我們要為視窗類添加處理鍵盤事件的成員函數(shù)。在Classname一欄中選中類CMyView,然后在messages一欄中選中消息wm_char,單擊addfunction按鈕,系統(tǒng)就自動(dòng)往CMyView類中添加了處理wm_char消息的成員函數(shù)的框架。單擊editcode按鈕,接下來(lái)對(duì)OnChar這個(gè)成員函數(shù)進(jìn)行編輯和修改。 可以看出系統(tǒng)已經(jīng)自動(dòng)在這個(gè)成員函數(shù)中添加了CMyView的基類CView的WM_CHAR消息的處理函數(shù)。注意這一行代碼: BEGIN_MESSAGE_MAP(CMyView,CView) /AFX_MSG_MAP(CMyView) ON_WM_CHAR()
37、ON_WM_LBUTTONDOWN() ON_WM_CANCELMODE() /AFX_MSG_MAP /Standardprintingcommands ON_COMMAND(ID_FILE_PRINT,CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview) END_MESSAGE_MAP() 它被放在mfc的消息映射宏BEGIN_MESSAGE_MAP中,它的作用就是把windows系統(tǒng)發(fā)
38、來(lái)的WM_CHAR消息連接到CMyView類的成員函數(shù)OnChar上,即把這個(gè)成員函數(shù)作為處理WM_CHAR消息的過(guò)程。接下來(lái)我們就往這個(gè)成員函數(shù)中添加處理WM_CHAR消息的具體代碼。 首先在OnChar函數(shù)中添加如下的代碼: voidCMyView:OnChar(UINTnChar,UINTnRepCnt,UINTnFlags) /TODO:Addyourmessagehandlercodehereand/orcalldefault CMyDoc*pdoc; pdoc=GetDocument(); 這段代碼的作用是首先定義一個(gè)指向文檔類對(duì)象的指針pdoc,然后利用CMyView類的成員函數(shù)getdocument()獲取指向當(dāng)前視窗類所對(duì)應(yīng)的文檔類對(duì)象的指針,并把這個(gè)指針賦給定義的文檔類型指針pdoc,這樣我們?cè)诤竺婢涂梢杂谩皃doc_>mystring”的方式訪問(wèn)文檔類中定義的公有數(shù)據(jù)成員mystring了。 接著往函數(shù)OnChar
溫馨提示
- 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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度健康餐飲連鎖店租賃與品牌推廣合同3篇
- 建筑供報(bào)警聯(lián)合施工合同
- 汕頭音樂廳租賃合同
- 河道整治工程包工包料施工合同
- 2025項(xiàng)目貸款委托合同
- 兒童游樂場(chǎng)設(shè)施租賃合同
- 城市節(jié)能工程施工合同
- 水利工程招投標(biāo)代理協(xié)議范本
- 婚禮慶典租賃汽車合同
- 紀(jì)錄片拍攝助理聘用簡(jiǎn)章
- DB11 637-2015 房屋結(jié)構(gòu)綜合安全性鑒定標(biāo)準(zhǔn)
- 制造業(yè)生產(chǎn)流程作業(yè)指導(dǎo)書
- DB34∕T 4444-2023 企業(yè)信息化系統(tǒng)上云評(píng)估服務(wù)規(guī)范
- 福建中閩能源股份有限公司招聘筆試題庫(kù)2024
- 2024年高中生物新教材同步必修第二冊(cè)學(xué)習(xí)筆記第5章 本章知識(shí)網(wǎng)絡(luò)
- 腦血管疾病三級(jí)預(yù)防
- HSK標(biāo)準(zhǔn)教程5上-課件-L1
- 人教版五年級(jí)下冊(cè)數(shù)學(xué)預(yù)習(xí)單、學(xué)習(xí)單、檢測(cè)單
- JC-T 746-2023 混凝土瓦標(biāo)準(zhǔn)規(guī)范
- 如何落實(shí)管業(yè)務(wù)必須管安全
- 四年級(jí)上冊(cè)三位數(shù)乘除兩位數(shù)計(jì)算題
評(píng)論
0/150
提交評(píng)論