通行編程實(shí)驗(yàn)Windows程序設(shè)計(jì)2_第1頁
通行編程實(shí)驗(yàn)Windows程序設(shè)計(jì)2_第2頁
通行編程實(shí)驗(yàn)Windows程序設(shè)計(jì)2_第3頁
通行編程實(shí)驗(yàn)Windows程序設(shè)計(jì)2_第4頁
通行編程實(shí)驗(yàn)Windows程序設(shè)計(jì)2_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、Windows程序設(shè)計(jì)實(shí)驗(yàn)?zāi)康?. 了解Windows程序的消息機(jī)制和編程模式2. 了解MFC類庫結(jié)構(gòu)3. 了解AppWizard自動(dòng)生成的程序框架4. 了解Windows程序運(yùn)行結(jié)構(gòu)5. 學(xué)習(xí)簡單的繪圖操作6. 了解利用VC+的MFC類庫設(shè)計(jì)面向?qū)ο髴?yīng)用程序的過程實(shí)驗(yàn)內(nèi)容內(nèi)容一 Windows編程模式 Windows程序不同于控制臺(tái)模式程序。在編程時(shí)有以下特點(diǎn):1. 多任務(wù)。 Windows 是一個(gè)多任務(wù)的操作系統(tǒng),在同一時(shí)間內(nèi)可以執(zhí)行多個(gè)應(yīng)用程序。應(yīng)用程序無法獨(dú)占所有系統(tǒng)資源(CPU、內(nèi)存、屏幕、鍵盤、鼠標(biāo)等)。Windows操作系統(tǒng)必須小心管理所有系統(tǒng)資源,以便所有應(yīng)用程序可以分享,而所

2、有Windows應(yīng)用程序則必須根據(jù)Windows操作系統(tǒng)特有的接口來執(zhí)行操作,以確保Windows操作系統(tǒng)有效地管理系統(tǒng)資源?;诳刂婆_(tái)模式的程序假定是在單用戶操作系統(tǒng)下運(yùn)行,運(yùn)行的應(yīng)用程序可以獨(dú)占所有系統(tǒng)資源,不必考慮和其他應(yīng)用的分享。 2. 通過窗口進(jìn)行輸入輸出。Windows環(huán)境下,若想執(zhí)行輸入輸出操作,必須在屏幕上開一個(gè)窗口,然后通過此窗口,執(zhí)行輸入與輸出。應(yīng)用程序也可以開多個(gè)窗口,執(zhí)行多文檔操作。而控制臺(tái)模式下,只要執(zhí)行簡單的函數(shù)調(diào)用,就可以將信息輸出到屏幕上。 3. 通過消息接受數(shù)據(jù)輸入。Windows環(huán)境下,所有的用戶輸入都由系統(tǒng)統(tǒng)一管理,系統(tǒng)接收到用戶輸入后,進(jìn)行分析,將該輸入

3、以消息的形式發(fā)到合適的應(yīng)用程序的消息隊(duì)列中,每個(gè)應(yīng)用程序都有一個(gè)消息隊(duì)列。應(yīng)用程序的運(yùn)行過程就是不斷從消息隊(duì)列中取消息并進(jìn)行處理的過程。 4. 數(shù)據(jù)輸出以繪圖模式進(jìn)行。Windows環(huán)境下,繪圖模式是基本的工作模式,用戶所有的輸出都需要通過圖形設(shè)備接口進(jìn)行。 Windows應(yīng)用程序的結(jié)構(gòu) 閱讀以下內(nèi)容,然后完成后面實(shí)驗(yàn)步驟中的內(nèi)容WinMain()Windows應(yīng)用程序都有一個(gè)主程序WinMain(),該程序是Windows應(yīng)用程序的主過程。在MFC應(yīng)用框架下產(chǎn)生的應(yīng)用程序不用顯式寫這個(gè)函數(shù),系統(tǒng)自動(dòng)提供。開發(fā)人員只需在自己的應(yīng)用程序?qū)ο螅ㄔ搶ο笫菑念怌winApp派生的應(yīng)用程序類的實(shí)例)中重

4、載有關(guān)應(yīng)用程序初始化、應(yīng)用程序退出的函數(shù)來使程序按照自己的意愿執(zhí)行。WinMain()的執(zhí)行過程是:調(diào)用應(yīng)用程序?qū)ο蟮腎nitInstance 成員函數(shù)來初始化應(yīng)用程序,然后調(diào)用它的Run()成員函數(shù)來處理應(yīng)用程序的消息循環(huán)。當(dāng)程序運(yùn)行結(jié)束時(shí),Run()調(diào)用應(yīng)用程序的ExitInstance成員函數(shù)來做一些清除工作。下面是這一過程的示意圖:注:上圖中粗體字表示由系統(tǒng)提供的函數(shù),正常體字表示由程序員提供或重載的函數(shù)CWinApp所有使用MFC類庫的應(yīng)用程序都有且只有一個(gè)“應(yīng)用程序?qū)ο蟆?,該對象?fù)責(zé)應(yīng)用程序初始化和退出時(shí)的清理工作,并且進(jìn)行應(yīng)用級的消息處理。應(yīng)用程序?qū)ο笏鶎俚念悘腃WinApp類派

5、生而來。應(yīng)用程序?qū)ο筇峁┏跏蓟瘧?yīng)用程序和運(yùn)行應(yīng)用程序的成員函數(shù)。該對象是整個(gè)應(yīng)用程序創(chuàng)建的第一個(gè)對象,在系統(tǒng)調(diào)用WinMain()之前就已經(jīng)生成,因此必須將該對象聲明為全局變量。從CWinApp派生的應(yīng)用程序類必須重載InitInstance成員函數(shù)以便建立應(yīng)用程序的主窗口對象。此外,在應(yīng)用程序?qū)ο笾羞€可以重載以下函數(shù)。· Run() 循環(huán)進(jìn)行消息處理。它負(fù)責(zé)檢查消息隊(duì)列,如果有消息,則分發(fā)它進(jìn)行處理,如果沒有消息,則調(diào)用OnIdle進(jìn)行空閑時(shí)間處理。Run還調(diào)用 ExitInstance來退出應(yīng)用程序。 · ExitInstance() 負(fù)責(zé)程序退出時(shí)的清理工作。它只能由

6、Run函數(shù)來調(diào)用。 · OnIdle() 當(dāng)應(yīng)用程序的消息隊(duì)列為空時(shí),會(huì)執(zhí)行一個(gè)缺省的消息循環(huán),在該循環(huán)中調(diào)用OnIdle()函數(shù)。應(yīng)用程序可以通過重載該函數(shù)來完成一些后臺(tái)工作。 消息用VC寫出的應(yīng)用程序是消息驅(qū)動(dòng)的。諸如鼠標(biāo)單擊、敲鍵盤、窗口移動(dòng)之類的事件,由Windows以消息形式分發(fā)給正確的窗口進(jìn)行處理。許多消息是用戶與應(yīng)用程序的交互產(chǎn)生的,當(dāng)鼠標(biāo)單擊一個(gè)菜單項(xiàng)或工具條上的某一按鈕時(shí),就會(huì)產(chǎn)生命令消息,用戶移動(dòng)一個(gè)窗口或是放大、縮小一個(gè)窗口時(shí),也會(huì)產(chǎn)生消息。程序的啟動(dòng)或停止、窗口失去焦點(diǎn)等都會(huì)產(chǎn)生消息。應(yīng)用程序的run函數(shù)就負(fù)責(zé)檢查并分發(fā)消息給合適的窗口處理。能夠接受消息的類一

7、般會(huì)在定義時(shí)聲明一個(gè)“消息映象(MESSAGE_MAPPING)”,該映象說明了該類對象可以接受并處理的消息,并且建立了消息和處理消息的成員函數(shù)之間的對應(yīng)關(guān)系。VC+中可以接受消息的類都會(huì)定義一個(gè)消息映象,消息映象的定義自成一體,形式為:BEGIN_MESSAGE_MAP(類名,父類名)ON_COMMAND(消息名,處理消息的成員函數(shù)名)END_MESSAGE_MAP() 實(shí)驗(yàn)步驟1. 單擊菜單File|New,選擇projects標(biāo)簽下的MFC AppWizard(.exe),在項(xiàng)目名字編輯框中輸入helloMFC,然后單擊OK 2. 在下一個(gè)對話框中,選擇Single Document創(chuàng)建

8、一個(gè)單文檔應(yīng)用。然后按Finish略國后面幾個(gè)對話框。在最后一個(gè)對話框中按OK。此時(shí)新的項(xiàng)目產(chǎn)生 3. 在工作區(qū)窗口中,選擇FileView標(biāo)簽,然后單擊窗口中的Header Files前面的+號,在展開的文件名中選文件HelloMFC.h,雙擊它,在右邊顯示文件內(nèi)容。 在該頭文件中定義了你的應(yīng)用程序類CHelloMFCApp,它從類CWinApp派生而來??梢钥吹剑擃愔兄剌d了函數(shù)InitInstance。4. 在工作區(qū)窗口中,選擇FileView標(biāo)CHelloMFCApp簽,然后單擊窗口中的Source Files前面的+號,在展開的文件名中選文件HelloMFC.cpp,雙擊它,在右邊顯

9、示文件內(nèi)容。在文件中找到下面兩行: / The one and only CHelloMFCApp objectCHelloMFCApp theApp;(theApp是你的應(yīng)用程序類的唯一一個(gè)實(shí)例,它負(fù)責(zé)你應(yīng)用程序的初始化(看到該類重載的函數(shù)initInstance的實(shí)現(xiàn)嗎?)。在你的程序找不到類似于控制臺(tái)應(yīng)用程序的main()函數(shù)的WinMain()函數(shù),因?yàn)橄到y(tǒng)已經(jīng)幫你實(shí)現(xiàn)好了。)5. 如果你想了解系統(tǒng)是如何執(zhí)行你的程序的,可以選擇菜單Build|Start Debug | Step into或者直接按F11來啟動(dòng)調(diào)試程序,跟蹤系統(tǒng)的執(zhí)行路徑,你會(huì)發(fā)現(xiàn),系統(tǒng)首先執(zhí)行的是一個(gè)WinMain(

10、)(也許叫AfxWinMain())函數(shù)。 6. 查看你的HelloMFC應(yīng)用程序,分別打開HelloMFC.CPP, HelloMFCDoc.CPP, HelloMFCView.CPP, MainFrm.CPP,查看每個(gè)文件中的消息映象。看看每個(gè)類都能接受并處理那些消息。 內(nèi)容二 MFC類庫(選做)閱讀以下內(nèi)容,然后完成后面實(shí)驗(yàn)步驟中的內(nèi)容MFC類庫中的所有類一起構(gòu)成了一個(gè)應(yīng)用程序框架,這個(gè)框架提供了一般Windows程序所具有的成分,程序員的任務(wù)就是在該框架下填充與應(yīng)用程序的具體邏輯相關(guān)的內(nèi)容。MFC類庫中包含的類大致可以分為以下幾類:1. 應(yīng)用體系結(jié)構(gòu)類。這些類提供應(yīng)用程序框架,它們提供

11、大多數(shù)應(yīng)用程序所具有的功能,程序員在這些框架下填充具體的應(yīng)用邏輯。程序員一般是從這些框架類派生出自己的類,然后在派生類中增加新的成員或重載原來的成員函數(shù)來實(shí)現(xiàn)自己程序的功能。使用AppWizard可以自動(dòng)生成應(yīng)用程序框架,構(gòu)成這個(gè)框架的類就是從應(yīng)用體系結(jié)構(gòu)類中的各個(gè)類派生出來的。應(yīng)用體系結(jié)構(gòu)類中包含: 1)應(yīng)用、線程支持類;2)文檔、視圖、框架窗口類;3)命令路由類。 2. 文件、數(shù)據(jù)庫類。通過這些類,應(yīng)用程序可以將信息存放到數(shù)據(jù)庫或文件中。有兩大類數(shù)據(jù)庫類:DAO和ODBC,它們的功能類似。有一些類負(fù)責(zé)處理標(biāo)準(zhǔn)的文件操作、ActiveX流以及HTML流。 3. 繪圖、打印類。Windows中

12、,所有的圖形輸出都是送到一個(gè)稱為DC(Device Context)的虛擬的繪圖區(qū)域,MFC提供了各種類來封裝各種類型的DC以及Windows的繪圖工具如位圖、刷子、調(diào)色板、畫筆等。 4. 窗口、對話框、控制類。CWnd類是這一分類中的所有類的基類。它們定義了各種類型的窗口。包括框架窗口、視圖、對話框、對話框中的各種控制等。 5. 簡單數(shù)據(jù)類型類。這些類封裝了各種常用的簡單的數(shù)據(jù)類型,如繪圖坐標(biāo)(CPoint, CSize,CRect)、字符串(CString)、時(shí)間與日期信息(CTime, COleDateTime, CTimeSpan, and COleTimeSpan)等。這些對象通常用

13、做Windows類的成員函數(shù)的參數(shù)。它們都提供了許多有用的成員函數(shù)。 6. 數(shù)組、表和映象類。這些類用于處理有聚集數(shù)據(jù)的情形,包括數(shù)組、列表和映象(maps)。映象是一種非常有用的類,它可以容納不同類型的對象的聚集。這些集合類都支持動(dòng)態(tài)分配空間,而且可以用在非Windows程序中。類的使用方式也很靈活,你可以直接使用這些類,可以從它們派生出自己的類,也可以從模板類中構(gòu)造自己的聚集類。 7. 互聯(lián)網(wǎng)和網(wǎng)絡(luò)類。這些類提供了利用ISAPI或者Windows Socket與其他計(jì)算機(jī)交互的功能。利用這些類,可以編制Internet服務(wù)程序、網(wǎng)絡(luò)通訊程序。 8. OLE類。OLE類可以和其他的應(yīng)用程序框

14、架類一起工作,提供對ActiveX API的方便的訪問方式。 9. 調(diào)試及異常類。這些類支持對動(dòng)態(tài)內(nèi)存分配的調(diào)試以及異常信息的產(chǎn)生、捕獲與傳遞。MFC中幾個(gè)重要的類1. CObject CObject是MFC類庫的主要基類。它不僅可以作為庫中的類的基類,還作為你所寫的類的基類。用CObject作為基類可以提供以下好處: o 串形化(serialization)支持。"Serialization"是將對象存入永久存儲(chǔ)媒體(如磁盤)或從永久存儲(chǔ)媒體讀取對象信息的過程。MFC的CObject對象內(nèi)置對Serialization的支持,因此所有從該類派生的類的對象也繼承了這一特征。

15、serialization的基本思想是:對象應(yīng)該能將它的當(dāng)前狀態(tài)信息保存起來,在將來的某一時(shí)刻能夠重新恢復(fù)其狀態(tài);對象自己應(yīng)該負(fù)責(zé)其狀態(tài)的存取。因此,支持Serialization的對象應(yīng)該實(shí)現(xiàn)一個(gè)成員函數(shù)完成這一功能。MFC使用類CArchive的對象來擔(dān)任存儲(chǔ)媒體和要存儲(chǔ)的對象的中介。這個(gè)對象一般會(huì)和一個(gè)文件類CFile的對象相連。CArchive對象使用重載的抽取(>>)和插入(<<) 操作符來完成讀寫操作。 o 運(yùn)行時(shí)類(Run-time class)信息支持。從CObject派生的所有類都與一個(gè) CRuntimeClass結(jié)構(gòu)相關(guān)聯(lián),這個(gè)類可以在運(yùn)行時(shí)提供你對

16、象的有關(guān)信息,如對象所屬的類的名字、對象是否是從某個(gè)類派生而來等,還支持對象的動(dòng)態(tài)創(chuàng)建。這在某些程序中非常有用。 o 對象診斷輸出。從CObject派生的類可以重載Dump()成員函數(shù),將對象的成員以文本的形式寫入一個(gè)dump設(shè)備,這些信息可以用作調(diào)試時(shí)的診斷信息。 o 與集合(collection)類的兼容。集合類中存放的對象要求以CObject為基類。這樣可以提供多態(tài)性。所有從CObject派生出來的類的實(shí)例都可以作為對象存放到CObList的實(shí)例中。 2. CWnd CWnd是CObject的派生類,也是所有Windows類的基類,它提供MFC中所有窗口類的基本功能。它可以接受并處理與窗

17、口操作有關(guān)的消息(OnMessage成員函數(shù)),你可以在你的CWnd派生類中重載其成員函數(shù)OnMessage來控制其對消息的響應(yīng)。在你的應(yīng)用程序中可以創(chuàng)建若干子窗口。在MFC類庫中,有很多類從CWnd派生出來以提供不同的功能。其中很多類如CFrameWnd, CMDIFrameWn d, CMDIChildWnd, CView, CDialog又都是設(shè)計(jì)成由用戶進(jìn)一步派生而用。另外一些控制類,如CButton,則既可以直接使用,也可以進(jìn)一步派生。 實(shí)驗(yàn)步驟1. 啟動(dòng)Developer Studio。 2. 啟動(dòng)MSDN,選擇“Visual C+ Document”為活動(dòng)子集,選擇“目錄”標(biāo)簽,

18、單擊”MSDN Library Visual Studio 6.0”左邊的加號。 3. 在上面打開的目錄中查找關(guān)于MFC Class Library Reference的內(nèi)容 4. 雙擊上面所展開的目錄下的Hierachy Chart,右邊的文檔顯示窗口顯示Visual C+MFC類庫中的所有類的層次結(jié)構(gòu)。你會(huì)看到,除很少一部分類外,大多數(shù)MFC類都是從類CObject派生而來。 5. 單擊你想了解的類名,閱讀有關(guān)該類的一些說明信息。當(dāng)你看完,想返回到前面一頁時(shí),按”Standard”工具條上的后退符號(ß )返回。 內(nèi)容三 文檔、視圖與框架窗口閱讀以下內(nèi)容,了解WindowsMFC

19、應(yīng)用程序框架結(jié)構(gòu)。然后再次查看你生成的HelloMFC應(yīng)用程序,進(jìn)一步理解應(yīng)用程序的各個(gè)組成部分。MFC程序框架的核心概念是由文檔、視圖和框架窗口組成的文檔模板。1. 文檔是一個(gè)用戶可以與之交互(如編輯、閱讀)的數(shù)據(jù)對象,它通過使用文件菜單中的New或者Open命令創(chuàng)建,通??梢源娣旁谝粋€(gè)文件中。2. 視圖是一個(gè)窗口對象,文檔的內(nèi)容顯示在這個(gè)窗口中,用戶也只有通過這個(gè)窗口對象才能與一個(gè)文檔交互。視圖對象可以控制用戶如何看到文檔中的數(shù)據(jù)以及如何與之交互。一個(gè)文檔可以有多個(gè)視圖。3. 框架窗口提供了視圖生存的場所。視圖顯示在框架窗口內(nèi)部,框架窗口提供了工具條(以便接受用戶命令)和狀態(tài)條(以便顯示文

20、檔狀態(tài))。4. 文檔模板是用來組織文檔、視圖和框架窗口之間關(guān)系的一個(gè)類。它可以控制在一個(gè)文檔打開時(shí),創(chuàng)建相應(yīng)的框架窗口和視圖來顯示文檔。MFC中提供文檔、視圖、框架窗口和文檔模板的基類,應(yīng)用程序可以從這些基類派生出自己的類來實(shí)現(xiàn)自己的應(yīng)用邏輯。文檔類可以從類CDocument派生,視圖類可以從類CView, CScrollView, CEditVie等類派生,框架窗口類可以從類CFrameWnd(在SDI應(yīng)用中)或者類CMDIFrameWnd(在MDI應(yīng)用中)派生;文檔模板類可以從類CDocTemplate派生而來,一種文檔模板類控制一類文檔的創(chuàng)建和顯示。支持多種文檔類型的應(yīng)用需要定義多個(gè)文檔

21、模板。SDI應(yīng)用程序使用模板類CSingleDocTemplate而MDI應(yīng)用使用模板類CMultiDocTemplate。所有這些類對象都是從應(yīng)用程序?qū)ο笾苯踊蜷g接地生成出來。在程序運(yùn)行開始,只有一個(gè)應(yīng)用程序?qū)ο?。?yīng)用程序?qū)ο罂梢詣?chuàng)建文檔模板。文檔模板然后可以控制文檔的創(chuàng)建、打開和關(guān)閉,在文檔打開時(shí),相應(yīng)的框架窗口和視圖也由文檔模板自動(dòng)創(chuàng)建,文檔關(guān)閉時(shí),相應(yīng)的框架窗口和視圖也會(huì)自動(dòng)關(guān)閉。實(shí)驗(yàn)步驟1. 在你的HelloMFC應(yīng)用程序中,查看文件HelloMFC.cpp中的應(yīng)用程序類CHelloMFCApp的成員函數(shù)InitInstance的實(shí)現(xiàn),在其中找到創(chuàng)建文檔模板的語句: CSingleD

22、ocTemplate* pDocTemplate;pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CHelloMFCDoc),RUNTIME_CLASS(CMainFrame), / main SDI frame windowRUNTIME_CLASS(CHelloMFCView);AddDocTemplate(pDocTemplate);可以看到,文檔模板創(chuàng)建時(shí)使用了三個(gè)類(文檔類、視圖類和框架窗口類)作為其參數(shù)。2. 分別打開定義CHelloMFCDoc、CMainFrame和CHelloMFCView這三

23、個(gè)類的頭文件,看看它們都是從哪個(gè)類繼承而來。CHelloMFCView中定義了一個(gè)函數(shù)GetDocument(),這個(gè)函數(shù)可以返回視圖所對應(yīng)的文檔的指針。3. 打開HelloMFC.cpp,在InitInstance函數(shù)的最后兩行是顯示主窗口的語句: m_pMainWnd->ShowWindow(SW_SHOW);m_pMainWnd->UpdateWindow();這個(gè)主窗口就是整個(gè)應(yīng)用程序的框架窗口。它也是構(gòu)成文檔模板的三要素之一的框架窗口。在HelloMFC程序一啟動(dòng)時(shí),就已經(jīng)創(chuàng)建了一個(gè)文檔,因此,該文檔對應(yīng)的框架窗口也自動(dòng)打開。4. 了解了應(yīng)用程序框架后,打開你應(yīng)用程序所在

24、的目錄,查看一下該目錄下都有哪些文件。5. 打開helloMFCView.cpp文件,修改函數(shù)CHelloMFCView:OnDraw(),在視圖窗口的客戶區(qū)輸出“Hello World!” void CHelloMFCView:OnDraw(CDC* pDC)CHelloMFCDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC->TextOut(50,50,"Hello,World!");AppWizard自動(dòng)生成的文件l 項(xiàng)目文件hel

25、loMFC.DSW工作臺(tái)文件helloMFC.OPT工作臺(tái)選項(xiàng)文件,存放關(guān)于工作臺(tái)的所有選項(xiàng)(如工作臺(tái)布局)helloMFC.DSP項(xiàng)目文件。存放特定于項(xiàng)目的內(nèi)容,包括項(xiàng)目中包含的文件、編譯方式、連接選項(xiàng)等等。與.mak文件的作用相同l C+源文件和頭文件:項(xiàng)目的主要源文件,該文件中創(chuàng)建類CHelloMFCApp的實(shí)例,并重載其成員函數(shù)InitInstance。對于可執(zhí)行程序,CHelloMFC:InitInstance做以下事情:登記文檔模板(作為文檔和視圖之間連接的機(jī)制)、創(chuàng)建主框架窗口、創(chuàng)建一個(gè)空文檔(或如果在命令行指定了一個(gè)文檔,則打開一個(gè)已有文檔)。helloMFCDoc.cpp,h

26、elloMFCDoc.h實(shí)現(xiàn)了文檔類CHelloMFCDoc,該類從類CDocument派生而來,可以完成文檔的存取、修改等操作。文檔內(nèi)容的顯示通過與文檔相聯(lián)系的類CHelloMFCView的對象完成。helloMFCView.cpp, helloMFCView.h實(shí)現(xiàn)了視圖類CHelloMFCView,視圖類用于顯示和打印文檔數(shù)據(jù)。CHelloMFCView可以從類CEditView, CFormView, CRecordView, CDaoRecordView, CTreeView, CListView, CRichEditView, CScrollView,或CView派生而來。這個(gè)項(xiàng)目

27、中的CHelloMFCView從類CView派生而來。該類中實(shí)現(xiàn)了一些框架性函數(shù),包括繪制視圖函數(shù)、調(diào)試診斷語句,如果選擇打印支持,則還實(shí)現(xiàn)關(guān)于打印、打印設(shè)置、打印預(yù)覽等命令處理。MainFrm.cpp,MainFrm.h實(shí)現(xiàn)了從類CMainFrame派生而來的類CFrameWnd (SDI應(yīng)用程序) 或CMDIFrameWnd (MDI應(yīng)用程序),該類負(fù)責(zé)處理工具條和狀態(tài)條的創(chuàng)建。StdAfx.cpp,StdAfx.h預(yù)編譯頭文件,用于建立預(yù)編譯頭文件helloMFC.PCH和預(yù)編譯類型文件STDAFX.OBJl 資源文件helloMFC.rc, resource.h項(xiàng)目的資源文件及其頭文件

28、。資源文件中包含缺省的菜單定義和加速器、字符串表等。還有一個(gè)缺省的About對話框和一個(gè)icon。資源文件中還包含了標(biāo)準(zhǔn)的MFC資源AFXRES.RC。如果有工具條支持,則還有一個(gè)工具條位圖文件 (RESTOOLBAR.BMP).helloMFC.ico項(xiàng)目的圖標(biāo)文件,在應(yīng)用程序變?yōu)樽钚』蛟趯υ捒蛑锌梢猿霈F(xiàn)圖標(biāo)。helloMFC.ic2用于存放那些不是由Developer Studio編輯的資源。helloMFCDoc.ico 項(xiàng)目中文檔的圖標(biāo)文件。RESToolbar.bmp工具條位圖l 文本文件readme.txt描述項(xiàng)目下由系統(tǒng)的AppWizard或 ControlWizard.自動(dòng)產(chǎn)生

29、的各個(gè)文件的含義。內(nèi)容四 學(xué)習(xí)使用畫筆和畫刷 前面你已經(jīng)了解了Windows 應(yīng)用程序的基本結(jié)構(gòu),知道AppWizard為你生成的文件的作用。這個(gè)實(shí)驗(yàn)中,你將嘗試在這個(gè)程序框架上加上自己的應(yīng)用邏輯:在視圖中畫個(gè)矩形或是橢圓。在實(shí)驗(yàn)一中,你已經(jīng)嘗試在窗口中輸出一行文字“Hello, World!”,當(dāng)時(shí)是在CHelloMFCView的成員函數(shù)OnDraw()中加了一個(gè)語句:pDC->TextOut(50,50,"Hello, World");這里涉及到Windows程序如何輸出信息。Windows程序使用“設(shè)備上下文(Device Context)”來向輸出設(shè)備(顯示器

30、、打印機(jī)等)輸出文字、圖形信息。設(shè)備上下文設(shè)備上下文,簡稱為DC,是由Windows程序保存的一個(gè)結(jié)構(gòu),該結(jié)構(gòu)里存儲(chǔ)著程序向設(shè)備顯示輸出時(shí)所需要的設(shè)備信息,包括圖形對象以及它們相關(guān)的屬性和輸出的圖形模式。DC是圖形設(shè)備接口(GDI)的重要組成部分,在使用任何GDI輸出函數(shù)之前,你必須建立一個(gè)設(shè)備上下文。使用設(shè)備上下文的最大好處是硬件無關(guān)性。因?yàn)樗械妮敵龆纪ㄟ^DC進(jìn)行,程序不需要關(guān)心DC對應(yīng)的具體輸出設(shè)備。與DC關(guān)聯(lián)的圖形對象有畫筆、畫刷、位圖、字體、調(diào)色板等。在需要用輸出某種圖形對象以前,需要先將它與一個(gè)設(shè)備上下文關(guān)聯(lián)起來,然后通過設(shè)備上下文來輸出。在Visual C+中,總是通過MFC類來

31、訪問設(shè)備上下文。這些類封裝了DC數(shù)據(jù)結(jié)構(gòu),并提供一些有用的功能來簡化應(yīng)用程序。CDC是所有設(shè)備上下文類的基類,在上面實(shí)驗(yàn)中修改了函數(shù)CHelloMFCView:OnDraw(),該函數(shù)用于視圖窗口在它的窗口區(qū)輸出內(nèi)容,其中就用到了CDC:void CHelloMFCView:OnDraw(CDC* pDC)CHelloMFCDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data herepDC->TextOut(50,50,"Hello,World!");在O

32、nDraw函數(shù)調(diào)用前,MFC框架結(jié)構(gòu)就建立好了OnDraw函數(shù)所用的設(shè)備上下文,并且將它作為參數(shù)傳遞給OnDraw函數(shù),OnDraw函數(shù)然后就可以利用這個(gè)pDC進(jìn)行輸出。大多數(shù)需要設(shè)備上下文的函數(shù)都需要用DC作為函數(shù)參數(shù)。畫筆和畫刷畫筆和畫刷是常用的兩種GDI對象,畫筆是WindowsGDI提供的用來繪制直線和圖形的對象,它的作用就想我們通常使用的筆,可以用它繪制直線、正方形、矩形、圓等基本的圖形。構(gòu)造畫筆時(shí)至少要指定三個(gè)屬性:畫筆的類型(畫實(shí)線、虛線還是點(diǎn)劃線等)、寬度和顏色。Windows中提供的畫筆類是CPen,你可以構(gòu)造這個(gè)類的對象來創(chuàng)建自己的畫筆。畫刷是Windows程序中用來填充一個(gè)空間、窗體或其他與區(qū)域有關(guān)的GDI對象。它主要用來對一個(gè)

溫馨提示

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

評論

0/150

提交評論