![第八講MFC程序開發(fā)概述_第1頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/21/6e939f4a-69e3-4952-8cb3-355d67e6cb6e/6e939f4a-69e3-4952-8cb3-355d67e6cb6e1.gif)
![第八講MFC程序開發(fā)概述_第2頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/21/6e939f4a-69e3-4952-8cb3-355d67e6cb6e/6e939f4a-69e3-4952-8cb3-355d67e6cb6e2.gif)
![第八講MFC程序開發(fā)概述_第3頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/21/6e939f4a-69e3-4952-8cb3-355d67e6cb6e/6e939f4a-69e3-4952-8cb3-355d67e6cb6e3.gif)
![第八講MFC程序開發(fā)概述_第4頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/21/6e939f4a-69e3-4952-8cb3-355d67e6cb6e/6e939f4a-69e3-4952-8cb3-355d67e6cb6e4.gif)
![第八講MFC程序開發(fā)概述_第5頁](http://file2.renrendoc.com/fileroot_temp3/2021-9/21/6e939f4a-69e3-4952-8cb3-355d67e6cb6e/6e939f4a-69e3-4952-8cb3-355d67e6cb6e5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第八講第八講 MFC程序開發(fā)概述程序開發(fā)概述進(jìn)一步的學(xué)習(xí)應(yīng)用開發(fā):桌面應(yīng)用、網(wǎng)絡(luò)與應(yīng)用開發(fā):桌面應(yīng)用、網(wǎng)絡(luò)與WebWeb編程、數(shù)據(jù)庫編程、嵌入式編程及驅(qū)動開發(fā)編程、數(shù)據(jù)庫編程、嵌入式編程及驅(qū)動開發(fā)進(jìn)一步的學(xué)習(xí)n如何進(jìn)一步學(xué)好編程技術(shù)n追求、志向與興趣n勤奮+實踐+思考n開放的心態(tài)、永遠(yuǎn)學(xué)習(xí)的態(tài)度n學(xué)習(xí)知識的不同層次n運用知識:從課堂獲取知識并靈活應(yīng)用n擴(kuò)展知識:掌握學(xué)習(xí)的方法和獲取知識的手段,從而具備自行獲取知識的能力n創(chuàng)造知識:掌握知識背后的思想和原理,從而具備創(chuàng)造知識的能力MFC相關(guān)概念n類庫是一個可以在應(yīng)用程序中使用的相互關(guān)聯(lián)的類的集合。nMFC (Microsoft Foundatio
2、n Classes)庫Microsoft 基本類庫是一個Windows應(yīng)用程序框架,它定義了應(yīng)用程序的結(jié)構(gòu),并實現(xiàn)了標(biāo)準(zhǔn)的用戶接口:n管理窗口、菜單、對話框,實現(xiàn)基本的輸入/輸出和數(shù)據(jù)存儲。MFC相關(guān)概念n應(yīng)用程序框架是一種類庫的超集,是用于編寫最終軟件的一種“半成品”,其作用主要是:n提供應(yīng)用軟件的規(guī)范化結(jié)構(gòu)n提供與具體應(yīng)用無關(guān)的基礎(chǔ)可復(fù)用代碼,提高軟件開發(fā)的效率n在程序運行時,基本流程的控制多數(shù)是由框架實現(xiàn)的。n應(yīng)用MFC框架來構(gòu)造應(yīng)用程序時,程序員的角色就是提供應(yīng)用程序?qū)S玫拇a,并指定這些代碼是用來響應(yīng)哪些消息和命令的,以使框架能夠在消息和處理消息的代碼間建立聯(lián)系。MFC相關(guān)概念n學(xué)習(xí)
3、并使用MFC進(jìn)行Windows應(yīng)用程序開發(fā)需要以下基礎(chǔ):nC+編程技術(shù)nWin32編程的基本概念n“Win32”指32位的Windows平臺nWin32編程是指運用C/C+語言直接(不使用MFC)在Win32平臺上進(jìn)行Windows應(yīng)用程序開發(fā)n“VC”指的是Visual C+,是一種用于Windows環(huán)境下C/C+編程、Win32編程、MFC應(yīng)用程序開發(fā)和ATL(ActiveX Template Library)應(yīng)用程序開發(fā)的集成開發(fā)環(huán)境(IDE, Integrated Development Environment )。MFC相關(guān)概念nWindows下的C+程序開發(fā)有以下幾種方式:n純粹的
4、C/C+程序n基于控制臺的Win32程序n基于窗口的Win32程序n基于MFC的應(yīng)用程序n基于ATL的應(yīng)用程序Windows編程模式n當(dāng)用C來編寫MS-DOS應(yīng)用程序時,最起碼要有一個main函數(shù)。當(dāng)用戶運行該應(yīng)用程序時,操作系統(tǒng)會自動調(diào)用main函數(shù),從這一點上講,我們可以使用任何所需要的程序結(jié)構(gòu)n當(dāng)Windows操作系統(tǒng)運行程序時,它首先調(diào)用程序中的WinMain函數(shù)。因此,在Windows應(yīng)用程序中一定要有WinMain函數(shù)nWinMain函數(shù)一般用來完成某些特殊的任務(wù),其中最重要的任務(wù)就是要創(chuàng)建該應(yīng)用程序的“主窗口”n“主窗口”中必須包含用來處理Windows所發(fā)送的消息的代碼Wind
5、ows編程模式nWinMain函數(shù)n初始化應(yīng)用n初始化和創(chuàng)建應(yīng)用窗口n進(jìn)入應(yīng)用程序的消息循環(huán)n窗口過程WndProc()n執(zhí)行窗口的消息處理:分析消息信息,決定應(yīng)用程序如何處理消息或響應(yīng)一個事件Windows編程模式n基于Windows的程序和基于MS-DOS的程序之間的一個最根本的差別在于:nMS-DOS程序是通過調(diào)用操作系統(tǒng)的功能來獲得用戶輸入的n而Windows程序則是通過操作系統(tǒng)發(fā)送的消息來處理用戶輸入的n消息是什么?n消息是包含一定參數(shù)的,用于在對象之間或操作系統(tǒng)和應(yīng)用程序之間傳遞信息的特定對象Windows編程模式n許多Windows消息都經(jīng)過了嚴(yán)格的定義,并且適用于所有的程序。例
6、如:n當(dāng)窗口被創(chuàng)建時,系統(tǒng)就會發(fā)送WM_CREATE消息n當(dāng)用戶按下鼠標(biāo)左鍵時,系統(tǒng)就會發(fā)送WM_LBUTTONDOWN消息n當(dāng)用戶敲一個字符鍵時,系統(tǒng)就會發(fā)送WM_CHAR消息n而當(dāng)用戶關(guān)閉窗口時,系統(tǒng)又會發(fā)送WM_CLOSE消息n當(dāng)用戶進(jìn)行菜單選擇和對話框按鈕單擊等操作時,系統(tǒng)又會發(fā)送WM_COMMAND消息給適當(dāng)?shù)拇翱趎用戶不用擔(dān)心如何使這些消息與代碼聯(lián)系起來,因為這是應(yīng)用程序框架完成的事情Windows編程模式nWindows系統(tǒng)是一個消息驅(qū)動的OSn消息的組成:一個消息由一個消息名稱(UINT),和兩個參數(shù)(WPARAM,LPARAM)組成。當(dāng)用戶進(jìn)行了輸入或是窗口的狀態(tài)發(fā)生改變時系
7、統(tǒng)都會發(fā)送消息到某一個窗口。例如當(dāng)菜單選中之后會有WM_COMMAND消息發(fā)送,WPARAM的高字中(HIWORD(wParam))是命令的ID號,對菜單來講就是菜單ID。當(dāng)然用戶也可以定義自己的消息名稱,也可以利用自定義消息來發(fā)送通知和傳送數(shù)據(jù)。 n誰將收到消息:一個消息必須由一個窗口接收。在窗口的過程(WNDPROC)中可以對消息進(jìn)行分析,對自己感興趣的消息進(jìn)行處理。例如你希望對菜單選擇進(jìn)行處理那么可以定義對WM_COMMAND進(jìn)行處理的代碼,如果希望在窗口中進(jìn)行圖形輸出就必須對WM_PAINT進(jìn)行處理。 n未處理的消息到那里去了:MS為窗口編寫了默認(rèn)的窗口過程,這個窗口過程將負(fù)責(zé)處理那些
8、你不處理的消息。正因為有了這個默認(rèn)窗口過程我們才可以利用Windows的窗口進(jìn)行開發(fā)而不必過多關(guān)注窗口各種消息的處理。例如窗口在被拖動時會有很多消息發(fā)送,而我們都可以不予理睬讓系統(tǒng)自己去處理。 n窗口句柄:窗口對象的唯一標(biāo)識Windows編程模式n消息機(jī)制n系統(tǒng)將會維護(hù)一個或多個消息隊列,所有產(chǎn)生的消息都會被放入或插入隊列中。系統(tǒng)會在隊列中取出每一條消息,根據(jù)消息的接收句柄將該消息發(fā)送給擁有該窗口的程序的消息循環(huán)。每一個運行的程序都有自己的消息循環(huán),在循環(huán)中得到屬于自己的消息并根據(jù)接收窗口的句柄調(diào)用相應(yīng)的窗口過程。而在沒有消息時消息循環(huán)就將控制權(quán)交給系統(tǒng),所以Windows可以同時進(jìn)行多個任務(wù)
9、。Windows編程模式Windows編程模式nWindows的圖形設(shè)備接口(GDI, Graphical Device Interface)nWindows針對多種不同的圖形輸出設(shè)備(如各種顯示卡、打印機(jī)等)提供了一致的抽象接口GDI,使得我們的程序可以不必關(guān)心與系統(tǒng)相連的顯示卡及打印機(jī)的類型。n圖中,DC(設(shè)備環(huán)境/設(shè)備上下文:Device Context)是物理設(shè)備(如顯示器、打印機(jī)等)的邏輯模型,GDI是DC和設(shè)備驅(qū)動程序之間的隔離層(或叫做抽象接口)。應(yīng)用程序DCGDI設(shè)備驅(qū)動程序物理硬件圖形物理設(shè)備Windows編程模式n基于資源的程序設(shè)計n在MS-DOS下,為了實現(xiàn)數(shù)據(jù)驅(qū)動的程序
10、設(shè)計,必須將數(shù)據(jù)定義為初始化常量,或者提供單獨的數(shù)據(jù)文件供程序讀取。n而當(dāng)進(jìn)行Windows程序設(shè)計時,可以用一些特定的格式將這些數(shù)據(jù)存儲在資源文件中,這樣鏈接器就可以把由C+編譯器輸出的二進(jìn)制代碼和二進(jìn)制資源文件結(jié)合起來生成可執(zhí)行程序。n資源文件可以包含位圖、圖標(biāo)、菜單定義、對話框設(shè)計和字符串,甚至可以包含用戶自定義的格式。Windows編程模式n動態(tài)鏈接庫(DLL, Dynamic Link Library)n在MS-DOS環(huán)境下,所有程序的目標(biāo)模塊在創(chuàng)建過程中都被靜態(tài)地鏈接起來。n而Windows則允許動態(tài)地鏈接,即一些特定結(jié)構(gòu)的庫可以在運行過程中被裝入和鏈接,并且多個應(yīng)用程序可以共享同
11、一個動態(tài)鏈接庫,這樣可以大大節(jié)省內(nèi)存和磁盤空間。nWin32應(yīng)用程序編程接口(API, Application Program Interface)nWin32操作系統(tǒng)平臺提供的基礎(chǔ)編程接口,MFC實際上封裝了這些編程接口Windows編程模式開始執(zhí)行開始執(zhí)行初始化應(yīng)用初始化應(yīng)用初始化和創(chuàng)建初始化和創(chuàng)建應(yīng)用窗口應(yīng)用窗口進(jìn)入消息循環(huán)并進(jìn)入消息循環(huán)并從消息隊列得到從消息隊列得到一個消息一個消息當(dāng)前消息是當(dāng)前消息是否否“退出退出”? ?終止執(zhí)行終止執(zhí)行程序是否定義程序是否定義了對此消息的了對此消息的處理處理進(jìn)行默認(rèn)處理進(jìn)行默認(rèn)處理處理消息處理消息否否否否是是是是在在MFC程序開發(fā)中,程序開發(fā)中,Wi
12、ndows程序的基本結(jié)構(gòu)被程序的基本結(jié)構(gòu)被MFC應(yīng)用程應(yīng)用程序框架序框架所隱藏,程序員一般無法所隱藏,程序員一般無法直接看到直接看到Windows程序的基本結(jié)程序的基本結(jié)構(gòu),也看不到構(gòu),也看不到WinMain函數(shù)。函數(shù)。集成開發(fā)環(huán)境(IDE)n項目(Project)n項目是一些相互關(guān)聯(lián)的源文件的集合,這些源文件經(jīng)過編譯、鏈接,然后被組合在一起形成可執(zhí)行的Windows應(yīng)用程序或者是DLL。n資源編輯器n實現(xiàn)“所見即所得”的資源編輯nC/C+編譯器n對C/C+源文件進(jìn)行編譯,形成目標(biāo)代碼n資源編譯器n對資源文件進(jìn)行編譯,形成二進(jìn)制RES文件集成開發(fā)環(huán)境(IDE)n調(diào)試器n用于C/C+程序調(diào)試,實
13、現(xiàn)斷點、單步執(zhí)行、變量觀察等功能n應(yīng)用程序向?qū)?AppWizard)nAppWizard是一個代碼生成器,它會按照用戶通過對話框指定的特性、類名及源代碼文件名來產(chǎn)生Windows應(yīng)用程序的工作架構(gòu)。 AppWizard創(chuàng)建必要的基礎(chǔ)代碼,可以使用戶很快地開始一個新的應(yīng)用程序。nClassWizardnClassWizard是一個編寫和生成類的工具,能夠給出原型、函數(shù)體以及將消息同應(yīng)用程序框架相聯(lián)系的相應(yīng)代碼。集成開發(fā)環(huán)境(IDE)n源程序瀏覽器n源程序瀏覽器能夠使我們從類或函數(shù)的角度來了解(和編輯)程序,而不是直接從文件入手。nDefinitions and References如果選擇任何函
14、數(shù)、變量、類型、宏定義或者類,都會馬上看到它是在項目中的什么地方定義,并且在哪些地方用到了它。nCall Graph/Caller Graph對于所選擇的函數(shù),給出它的調(diào)用與被調(diào)用函數(shù)的圖示。nDerived Class Graph/Base Class Graph給出類層次關(guān)系的圖形表示。nFile Outline對于所選擇的文件,列出文件中的類、函數(shù)和數(shù)據(jù)成員。n聯(lián)機(jī)幫助MFC體系結(jié)構(gòu)n頭文件預(yù)編譯n把一個工程(Project)中使用的一些MFC標(biāo)準(zhǔn)頭文件(如Windows.H、Afxwin.H)預(yù)先編譯,以后該工程編譯時,不再編譯這部分頭文件,僅僅使用預(yù)編譯的結(jié)果。這樣可以加快編譯速度,
15、節(jié)省時間。n預(yù)編譯結(jié)果文件是projectname.pch。n編譯器通過一個頭文件stdafx.h來使用預(yù)編譯頭文件。stdafx.h這個頭文件名是可以在project的編譯設(shè)置里指定的。n編譯器認(rèn)為,所有在指令#include “stdafx.h”前的代碼都是預(yù)編譯的,它跳過#include “stdafx. h”指令,使用projectname.pch作為頭文件編譯這條指令之后的所有代碼。n因此,所有的MFC應(yīng)用程序CPP實現(xiàn)文件第一條語句都是:n#include stdafx.hMFC體系結(jié)構(gòu)n基于對話框nWindows附帶的計算器n基于單文檔(SDI, Single Document
16、Interface )nWindows附帶記事本n基于多文檔(MDI, Multiple Document Interface)nOffice中的WORDnAdobe PhotoshopMFC體系結(jié)構(gòu)nMFC是個相當(dāng)龐大的類庫,各個類間的繼承與派生關(guān)系較為復(fù)雜。 CObject類是MFC的基類,其它大部分類都是從CObject派生而來的。CObject類的派生類按功能可分為多個部分。下面簡要介紹部分常用的類的派生結(jié)構(gòu)。n按照慣例,MFC庫類名用大寫字母“C”打頭MFC體系結(jié)構(gòu) 圖:部分窗口類的繼承關(guān)系CObjectCCmdTargetCWndCFrameWndCViewCDialog控件類如C
17、ButtonMFC體系結(jié)構(gòu)n其中,CCmdTarget(命令目標(biāo)類)是MFC中擁有消息循環(huán)和消息處理機(jī)制的基類。nCWnd類是從CCmdTarget中派生出來的重要類,它是所有窗口類的基類。nCCmdTarget間接派生出了文檔/視圖結(jié)構(gòu)中應(yīng)用程序框架中的許多重要的類:CWinApp、CFrameWnd、CDocument、CView等(SDI應(yīng)用程序框架的四個主要的類)。 MFC體系結(jié)構(gòu)nCFrameWnd類是框架窗口類,由于框架窗口也是一種窗口,因此,框架窗口類CFrameWnd也繼承自窗口類CWnd,其具有一般窗口的所有特征,也可以在該類基礎(chǔ)上派生出具有一定特色的框架窗口類。n可以通過3
18、種方式來構(gòu)造框架窗口,這3種方式分別是用Create直接構(gòu)造、用LoadFrame直接構(gòu)造和用文檔模板間接構(gòu)造。MFC體系結(jié)構(gòu)nCView類是視圖類,其基類是類CWnd。視圖主要用于顯示數(shù)據(jù),充當(dāng)文檔與用戶交互的媒介。n視圖是框架窗口的子窗口,它管理著框架窗口的客戶區(qū),一個框架窗口可能有多個視圖,一個文檔也可以有多個視圖,但是一個視圖只能有一個文檔,視圖類、框架窗口類和文檔類三者之間聯(lián)系的紐帶是CDocTemplate類。nCDialog類就是對話框類,其基類是類CWnd。對話框是一種特殊的窗口,一般用來提供與用戶進(jìn)行交互的接口,其提供了對話框控件用來輸入輸出數(shù)據(jù),并能對數(shù)據(jù)進(jìn)行交換和校驗。M
19、FC體系結(jié)構(gòu)n應(yīng)用程序框架的核心是文檔視圖結(jié)構(gòu)。MFC通過文檔視圖結(jié)構(gòu)為應(yīng)用程序提供一種將數(shù)據(jù)與視圖分離的存儲方式。n文檔類的作用是將應(yīng)程序的數(shù)據(jù)保存在文檔類對象中,以及從磁盤文件中讀或向磁盤文件中寫數(shù)據(jù)。n視圖類的作用是顯示數(shù)據(jù)和編輯數(shù)據(jù)。MFC體系結(jié)構(gòu)nCWinApp類是從CCmdTarget中派生出來的最重要的類,每個用MFC編寫的Windows程序必須有一個它的派生類的對象,它代表一個應(yīng)用程序,整個程序的運行都由它負(fù)責(zé)。CWinApp類隱藏了Win32程序中WinMain函數(shù)。CObjectCCmdTargetCWinThreadCDocumentCWinAppCDocTemplate
20、MFC體系結(jié)構(gòu)n每個MFC應(yīng)用程序都有一個全局的應(yīng)用程序類對象,默認(rèn)是theApp,該應(yīng)用程序類對象在其它對象構(gòu)造之前構(gòu)造,并且在WinMain函數(shù)調(diào)用之前就已經(jīng)構(gòu)造了。應(yīng)用程序類對象提供了用于初始化和運行應(yīng)用程序的成員函數(shù)。MFC體系結(jié)構(gòu)nCDocument類是文檔類,其基類是類CCmdTarget,文檔類主要用于存儲數(shù)據(jù)n文檔類對象由文檔模板創(chuàng)建,文檔模板的基類是CDocTemplate類,文檔模板用于協(xié)調(diào)文檔、視圖和框架窗口的創(chuàng)建,三者之間構(gòu)成了文檔/視圖結(jié)構(gòu)。MFC體系結(jié)構(gòu)n圖形繪制類的基類是CDC(設(shè)備環(huán)境類)。CDC類提供了基本的繪圖及文本輸出函數(shù)。CObjectCDCCClien
21、tDCCPaintDCCWindowDCMFC體系結(jié)構(gòu)n繪圖對象類提供給CDC及其派生類在繪圖時所需的各種圖形對象,如畫筆、刷子、字體等。 CObjectCGdiObjectCPenCBrushCFontMFC體系結(jié)構(gòu)nMFC除了支持C+的基本類型類,如string類、vector類和map類等,還自定義了一些簡單類型類,大大方便了用戶開發(fā)應(yīng)用程序,使用戶在開發(fā)過程中不用考慮過細(xì)的粒度。這些簡單類型類主要有:nCPoint類:CPoint類是一個描述點坐標(biāo)的類,這個點坐標(biāo)自然就包含了橫坐標(biāo)x值和縱坐標(biāo)y值。該類封裝了點的一般操作,如判斷該點是否在某個矩形區(qū)域內(nèi)等。nCRect類:CRect類是
22、描述矩形的類,這個矩形類唯一由左上角坐標(biāo)和右下角坐標(biāo)確定,并封裝了矩形的一般操作。nCSize類:CSize類是描述尺寸的類,主要的數(shù)據(jù)成員是長和寬。nCString類:CString類是MFC類庫中的字符串類。nCTime類:CTime類封裝了時間的行為,包括年月日和時分秒等信息,以及在時間上的一般操作。 MFC體系結(jié)構(gòu)運行時,應(yīng)用程序框架首先獲得控制權(quán),依次執(zhí)行下面的步驟 1、構(gòu)造唯一的應(yīng)用類對象theApp,調(diào)用CWinApp類的構(gòu)造函數(shù)。 2、調(diào)用WinMain()函數(shù)。 WinMain()函數(shù)的工作又可細(xì)分為: 1)獲得指向唯一應(yīng)用類對象的指針。 2)進(jìn)行一些內(nèi)部初始化,若失敗,轉(zhuǎn)至
23、第5)步。 3)進(jìn)行應(yīng)用程序的初始化,即調(diào)用InitInstance()函數(shù)進(jìn)行初始化.如果失敗,則調(diào)用應(yīng)用類的ExitInstance ()函數(shù),轉(zhuǎn)至5)。 4)調(diào)用應(yīng)用類的Run()函數(shù),其功能主要是進(jìn)行消息循環(huán),不斷獲取消息和處理消息。一直到用戶關(guān)閉應(yīng)用程序的窗口,產(chǎn)生WM_QUIT消息,調(diào)用ExitInstance()函數(shù),準(zhǔn)備退出。 5)進(jìn)行應(yīng)用程序的收尾工作,比如刪除注冊的窗口類等。 6)返回。 3、從WinMain()函數(shù)返回后,刪除應(yīng)用程序的唯一應(yīng)用類的對象,刪除時要調(diào)用其析構(gòu)函數(shù)。 4、終止應(yīng)用程序。程序框架中各個類對象的相互調(diào)用關(guān)系 1、視圖類對象對文檔類對象的調(diào)用 例:C
24、DrawDoc *pDoc=GetDocumen( ); GetDocument()的作用是得到指向文檔對象的指針。 2、在框架類對象中獲得當(dāng)前的文檔和視圖對象指針 例:CDrawDoc* pDoc=(CDrawDoc *)GetActiveDocument(); CDrawView* pView=(CDrawView *)GetActiveView( ); 3、獲得應(yīng)用類對象的指針 例:CDrawApp* pWinApp=(CDrawApp*)AfxGetApp(); 4、從應(yīng)用類對象中獲得主框架類對象的指針 例:CMainFrame* pFrame= (CMainFrame*)(AfxGe
25、tApp()-m_pMainWnd);MFC應(yīng)用程序消息處理機(jī)制的建立在MFC Windows應(yīng)用程序中,必須正確地建立消息處理機(jī)制。n建立消息處理機(jī)制步驟建立消息處理機(jī)制步驟如下(可歸納為三步曲): 1、 聲明消息映射聲明消息映射 若希望能進(jìn)行消息處理的類具有接收消息的能力,需要在該類的末尾加入消息映射說明。 格式: DECLARE_MESSAGE_MAP() 2、 建立消息與處理函數(shù)之間的映射建立消息與處理函數(shù)之間的映射 格式: BEGIN_MESSAGE_MAP(子類名,父類名)/消息映射宏定義消息映射宏定義或消息映射語句消息映射語句(根據(jù)使用消息的多少,一般有若干個) ON_(消息名或
26、控制號,處理函數(shù)名) END_MESSAGE_MAP()MFC應(yīng)用程序消息處理機(jī)制的建立注:消息映射宏定義將一個消息與一個處理函數(shù)關(guān)聯(lián)起來,以便對消息作出響應(yīng)。n 3、 在進(jìn)行消息處理的類中定義各消息處理函數(shù)在進(jìn)行消息處理的類中定義各消息處理函數(shù) 消息處理函數(shù)原型消息處理函數(shù)原型為:afx_msg 類型 函數(shù)名(WPARAM wParam,LPARAM lParam);例: MOUSE左鍵按下消息處理函數(shù)原型為: afx_msg void OnLButtonDown(UINT nFlags,CPoint point); MFC應(yīng)用程序框架并沒有采用虛函數(shù)來處應(yīng)用程序框架并沒有采用虛函數(shù)來處理理
27、Windows消息,相反,它通過一些宏來消息,相反,它通過一些宏來將特定的消息映射到派生類中相應(yīng)的成員將特定的消息映射到派生類中相應(yīng)的成員函數(shù)上。函數(shù)上。一個最簡單的MFC程序/mfc1.cpp/mfc1.cpp#include#include/MFC/MFC核心庫核心庫class CMainFrame:public CFrameWndclass CMainFrame:public CFrameWnd public:public: CMainFrame()CMainFrame() CString ch=MFC WindowsCString ch=MFC Windows程序程序; Create(
28、NULL,ch);Create(NULL,ch);/創(chuàng)建主窗口創(chuàng)建主窗口 protected:protected: afx_msg void OnLButtonDown(UINT nFlags,CPoint point);afx_msg void OnLButtonDown(UINT nFlags,CPoint point); DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP();class CMinApp:public CWinAppclass CMinApp:public CWinApp public:public: virtual BOOL InitIns
29、tance();virtual BOOL InitInstance();BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd) ON_WM_LBUTTONDOWN()ON_WM_LBUTTONDOWN()END_MESSAGE_MAP()END_MESSAGE_MAP()一個最簡單的MFC程序/Mouse/Mouse單擊處理單擊處理void CMainFrame:OnLButtonDown(UINT nFlags,CPoint point)void CMainFrame:OnLButtonDo
30、wn(UINT nFlags,CPoint point) CString str=CString str=馬到成功馬到成功!;!; MessageBox(str);MessageBox(str); CFrameWnd:OnLButtonDown(nFlags,point);CFrameWnd:OnLButtonDown(nFlags,point); BOOL CMinApp:InitInstance()BOOL CMinApp:InitInstance() m_pMainWnd=new CMainFrame;/m_pMainWnd=new CMainFrame;/生成主窗口對象指針生成主窗口對
31、象指針 m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED);m_pMainWnd-ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd-UpdateWindow();m_pMainWnd-UpdateWindow(); return TRUE;return TRUE; CMinApp MyApp;/CMinApp MyApp;/生成應(yīng)用程序?qū)ο蟛?zhí)行應(yīng)用程序生成應(yīng)用程序?qū)ο蟛?zhí)行應(yīng)用程序MFC程序示例1n什么是視圖?n用戶角度:“視圖”實際上是一個普通窗口n程序員角度:是一個從MFC庫中的Cview類所派生出的類的對象n正如任何C+對象一
32、樣,視圖對象的行為也完全由類(基類和派生類)的成員函數(shù)和數(shù)據(jù)成員所決定n視圖類的創(chuàng)建會導(dǎo)致相應(yīng)窗口的顯示n按照C+程序設(shè)計的習(xí)慣,視圖類也被劃分為兩個源文件模塊頭文件(H)和源代碼文件(CPP)n單文檔界面(SDI)和多文檔界面(MDI)nSDI應(yīng)用程序只有一個窗口nMDI應(yīng)用程序則可以擁有和不同文檔相對應(yīng)的多個“子窗口”MFC程序示例1n使用AppWizard產(chǎn)生MFC應(yīng)用程序的基礎(chǔ)代碼選擇選擇“MFC應(yīng)用程序應(yīng)用程序”輸入項目名稱輸入項目名稱單擊單擊“確定確定”MFC程序示例1單擊單擊“下一步下一步”MFC程序示例1選擇選擇“單文檔單文檔”,其它不變其它不變單擊單擊“下一步下一步”MFC程
33、序示例1單擊單擊“下一步下一步”MFC程序示例1單擊單擊“下一步下一步”MFC程序示例1單擊單擊“下一步下一步”MFC程序示例1單擊單擊“下一步下一步”MFC程序示例1單擊單擊“下一步下一步”MFC程序示例1單擊單擊“完成完成”MFC程序示例1項目已經(jīng)生成,觀項目已經(jīng)生成,觀察一下項目文件察一下項目文件MFC程序示例1切換為切換為“類視圖類視圖”觀察項目的類結(jié)構(gòu)觀察項目的類結(jié)構(gòu)MFC程序示例1運行該程序的結(jié)果運行該程序的結(jié)果MFC程序示例1nCMFCExample1View 類的兩個最重要的基類是CView和CWndnCWnd提供了CMFCExample1View的“窗口屬性”nCView則提
34、供了它和應(yīng)用程序框架其他部分之間的聯(lián)系nOnDraw是CView類中的一個虛成員函數(shù),每當(dāng)視窗需要被重新繪制時,應(yīng)用程序框架都要調(diào)用OnDraw函數(shù)n應(yīng)用程序框架自動調(diào)用:當(dāng)用戶改變了窗口尺寸,或窗口需要重新恢復(fù)被遮蓋的部分n用戶觸發(fā)調(diào)用:如果視圖對應(yīng)的數(shù)據(jù)發(fā)生了變化,則用戶需要調(diào)用從CView繼承的Invalidate (或InvalidateRect)成員函數(shù)來觸發(fā)對OnDraw的調(diào)用nWindows設(shè)備環(huán)境nMFC庫中,設(shè)備環(huán)境是由CDC類對象來表示的,該對象被作為參數(shù)(以指針的形式)傳遞給了OnDraw函數(shù)。通過這個設(shè)備環(huán)境指針,可以調(diào)用CDC類的成員函數(shù)來完成各種繪制工作。MFC程序
35、示例1雙擊雙擊OnDraw成員函數(shù)成員函數(shù)選擇選擇CMFCExample1ViewCMFCExample1View類類出現(xiàn)出現(xiàn)OnDraw成員函數(shù)成員函數(shù)的代碼的代碼void CMFCExample1View:OnDraw(CDCvoid CMFCExample1View:OnDraw(CDC* * / /* *pDCpDC* */ / pDCpDC) ) CMFCExample1DocCMFCExample1Doc* * pDoc = GetDocument(); pDoc = GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);if (!
36、pDoc)if (!pDoc)return;return;/ TODO: / TODO: 在此處為本機(jī)數(shù)據(jù)添加繪制代碼在此處為本機(jī)數(shù)據(jù)添加繪制代碼/prints in default font & size, top left corner/prints in default font & size, top left cornerpDC-TextOutW(0,0,CString(Hello, world!);pDC-TextOutW(0,0,CString(Hello, world!);/selects a brush for the circle interior/sele
37、cts a brush for the circle interiorpDC-SelectStockObject(GRAY_BRUSH);pDC-SelectStockObject(GRAY_BRUSH);/draws a gray circle, 100 units in diameter /draws a gray circle, 100 units in diameter pDC-Ellipse(CRect(0, 20, 100, 120);pDC-Ellipse(CRect(0, 20, 100, 120); MFC程序示例1設(shè)置設(shè)備環(huán)境指針參數(shù)設(shè)置設(shè)備環(huán)境指針參數(shù)在設(shè)備環(huán)境中輸出在設(shè)
38、備環(huán)境中輸出文本字符串文本字符串在設(shè)備環(huán)境中選擇在設(shè)備環(huán)境中選擇灰色畫筆灰色畫筆在設(shè)備環(huán)境中在設(shè)備環(huán)境中畫一個橢圓畫一個橢圓(圓圓)CRect是是MFC中中表示矩形的類表示矩形的類MFC程序示例1新的運行結(jié)果新的運行結(jié)果MFC程序示例1雙擊雙擊rc文件文件嘗試使用資源編輯器嘗試使用資源編輯器MFC程序示例1學(xué)會使用幫助學(xué)會使用幫助單擊菜單單擊菜單“幫助幫助”-“目錄目錄”MFC程序示例2n消息映射n當(dāng)用戶在視窗中按下鼠標(biāo)左鍵時,Windows就會自動發(fā)送WM_LBUTTONDOWN消息給該視窗n如果程序需要對WM_LBUTTONDOWN消息有所反應(yīng)的話,在視圖類中就必須包含如下類似的成員函數(shù)n
39、在類的頭文件中也必須包含相應(yīng)的函數(shù)原型說明void CMFCExample1View:OnLButtonDown(UINT nFlags, CPoint point)void CMFCExample1View:OnLButtonDown(UINT nFlags, CPoint point) /event processing code here/event processing code here afx_msg void afx_msg void OnLButtonDown(UINT nFlags, CPoint point);OnLButtonDown(UINT nFlags, CPoin
40、t point);表明該原型說明是針對表明該原型說明是針對消息映射函數(shù)而言的消息映射函數(shù)而言的MFC程序示例2n消息映射n在代碼文件中還需要有一個消息映射宏,該消息映射宏用于將OnLButtonDown函數(shù)和應(yīng)用程序框架聯(lián)系在一起n最后,在類庫頭文件中還需包含如下語句n如何能知道哪個函數(shù)和哪個Windows消息相對應(yīng)呢?nMFC給出了基本的定義(參考Visual C+ 技術(shù)內(nèi)幕(第4版)附錄A)n可以通過手工編制消息控制函數(shù)BEGIN_MESSAGE_MAP(CMFCExample1View, CView)BEGIN_MESSAGE_MAP(CMFCExample1View, CView)ON
41、_WM_LBUTTONDOWN()ON_WM_LBUTTONDOWN()/entry specifically for OnLButtonDown/entry specifically for OnLButtonDown/other message map entries/other message map entriesEND_END_MESSAGE_MAP()MESSAGE_MAP()DECLARE_MESSAGE_MAP()DECLARE_MESSAGE_MAP()MFC程序示例2n用視圖類的數(shù)據(jù)成員保存視圖的狀態(tài)nm_rectEllipse,為Crect類的對象,用來保存橢圓的當(dāng)前外接
42、矩形nm_nColor,為一個整數(shù),用來保存橢圓的當(dāng)前顏色值n基于以上的視圖狀態(tài),可以設(shè)計一個消息映射成員函數(shù),使得該橢圓的顏色(視圖的狀態(tài))在灰與白之間不斷地來回變化(通過單擊鼠標(biāo)左鍵觸發(fā))nWindows的客戶區(qū)域n一個窗口具有一個矩形的“客戶區(qū)域”,它包括邊框、標(biāo)題欄、菜單和貼邊工具欄,CWnd中的GetClient成員函數(shù)可以給出客戶區(qū)域的大小n正常情況下,不允許在客戶區(qū)域之外繪圖,并且大多數(shù)鼠標(biāo)信息只有當(dāng)鼠標(biāo)指針落在客戶區(qū)域之內(nèi)時才能夠接收到為什么不用全局變量來為什么不用全局變量來保存視圖的狀態(tài)呢?保存視圖的狀態(tài)呢?MFC程序示例2建立一個新的建立一個新的“MFC應(yīng)應(yīng)用程序用程序”項
43、目項目輸入項目名稱輸入項目名稱MFC程序示例2選擇選擇“單文檔單文檔”類型類型單擊單擊“完成完成”MFC程序示例2雙擊雙擊CMFCExample2ViewCMFCExample2View類定位到相應(yīng)的代碼類定位到相應(yīng)的代碼MFC程序示例2class CMFCExample2View : public CViewclass CMFCExample2View : public CView protected: / protected: / 僅從序列化創(chuàng)建僅從序列化創(chuàng)建CMFCExample2View();CMFCExample2View();DECLARE_DYNCREATE(CMFCExampl
44、e2View)DECLARE_DYNCREATE(CMFCExample2View)/ / 屬性屬性public:public:CMFCExample2DocCMFCExample2Doc* * GetDocument() const; GetDocument() const;private:private:int m_nColor;int m_nColor;CRect m_rectEllipse;CRect m_rectEllipse; 添加視圖類的成員變量添加視圖類的成員變量MFC程序示例2在構(gòu)造函數(shù)中添加成員在構(gòu)造函數(shù)中添加成員變量的初始化代碼變量的初始化代碼n定位到CMFCExampl
45、e2View的構(gòu)造函數(shù)n定位到CMFCExample2View:OnDraw()函數(shù)void CMFCExample2View:OnDraw(CDCvoid CMFCExample2View:OnDraw(CDC* * / /* *pDCpDC* */ / pDCpDC) ) CMFCExample2DocCMFCExample2Doc* * pDoc = GetDocument(); pDoc = GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);if (!pDoc)if (!pDoc)return;return;/ TODO: / TO
46、DO: 在此處為本機(jī)數(shù)據(jù)添加繪制代碼在此處為本機(jī)數(shù)據(jù)添加繪制代碼pDC-SelectStockObject(m_nColor);pDC-SelectStockObject(m_nColor);pDC-Ellipse(m_rectEllipse);pDC-Ellipse(m_rectEllipse); 設(shè)置設(shè)備環(huán)境指針參數(shù)設(shè)置設(shè)備環(huán)境指針參數(shù)選擇畫筆顏色選擇畫筆顏色繪制橢圓繪制橢圓CMFCExample2View:CMFCExample2View()CMFCExample2View:CMFCExample2View():m_rectEllipse(0,0,200,200):m_rectEllip
47、se(0,0,200,200) / TODO: / TODO: 在此處添加構(gòu)造代碼在此處添加構(gòu)造代碼m_nColor = GRAY_BRUSH;m_nColor = GRAY_BRUSH; MFC程序示例2n添加消息處理函數(shù)OnLButtonDown右鍵單擊視圖類右鍵單擊視圖類選擇彈出菜單中選擇彈出菜單中的的“屬性屬性”MFC程序示例2n添加消息處理函數(shù)OnLButtonDown右鍵單擊視圖類右鍵單擊視圖類選擇彈出菜單中選擇彈出菜單中的的“屬性屬性”在屬性窗口中選在屬性窗口中選擇擇“消息消息”標(biāo)簽標(biāo)簽尋找尋找WM_LBUTTONDOWN消消息,并點擊該消息右側(cè)的下拉息,并點擊該消息右側(cè)的下拉框
48、來添加框來添加OnLButtonDownOnLButtonDown函數(shù)函數(shù)MFC程序示例2出現(xiàn)出現(xiàn)OnLButtonDownOnLButtonDown函數(shù)代碼函數(shù)代碼MFC程序示例2void CMFCExample2View:OnLButtonDown(UINT nFlags, CPoint point)void CMFCExample2View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: / TODO: 在此添加消息處理程序代碼和在此添加消息處理程序代碼和/ /或調(diào)用默認(rèn)值或調(diào)用默認(rèn)值if (m_rectEllipse.PtInRect(
49、point)if (m_rectEllipse.PtInRect(point) if (m_nColor = GRAY_BRUSH)if (m_nColor = GRAY_BRUSH) m_nColor = WHITE_BRUSH;m_nColor = WHITE_BRUSH; elseelse m_nColor = GRAY_BRUSH;m_nColor = GRAY_BRUSH; InvalidateRect(m_rectEllipse);InvalidateRect(m_rectEllipse); CView:OnLButtonDown(nFlags, point);CView:OnLB
50、uttonDown(nFlags, point); point代表鼠標(biāo)的位置代表鼠標(biāo)的位置n在OnLButtonDown函數(shù)中添加以下代碼判斷鼠標(biāo)位置是否位判斷鼠標(biāo)位置是否位于矩形之內(nèi)于矩形之內(nèi)對畫筆顏色進(jìn)行反轉(zhuǎn)對畫筆顏色進(jìn)行反轉(zhuǎn)通過設(shè)置無效區(qū)域來觸發(fā)通過設(shè)置無效區(qū)域來觸發(fā)對對OnDraw函數(shù)的調(diào)用函數(shù)的調(diào)用MFC程序示例2測試程序運行結(jié)果:測試程序運行結(jié)果:單擊單擊橢圓所在矩形橢圓所在矩形區(qū)域,區(qū)域,橢圓顏色會發(fā)生翻轉(zhuǎn)橢圓顏色會發(fā)生翻轉(zhuǎn)問題:問題:如何能精確地判定橢圓如何能精確地判定橢圓區(qū)域呢?區(qū)域呢?MFC程序示例2void CMFCExample2View:OnLButtonDown(U
51、INT nFlags, CPoint point)void CMFCExample2View:OnLButtonDown(UINT nFlags, CPoint point) / TODO: / TODO: 在此添加消息處理程序代碼和在此添加消息處理程序代碼和/ /或調(diào)用默認(rèn)值或調(diào)用默認(rèn)值CRgn rgn;CRgn rgn;rgn.CreateEllipticRgnIndirect(m_rectEllipse);rgn.CreateEllipticRgnIndirect(m_rectEllipse);if (rgn.PtInRegion(point)if (rgn.PtInRegion(poi
52、nt) if (m_nColor = GRAY_BRUSH)if (m_nColor = GRAY_BRUSH) m_nColor = WHITE_BRUSH;m_nColor = WHITE_BRUSH; elseelse m_nColor = GRAY_BRUSH;m_nColor = GRAY_BRUSH; InvalidateRect(m_rectEllipse);InvalidateRect(m_rectEllipse); CView:OnLButtonDown(nFlags, point);CView:OnLButtonDown(nFlags, point); n調(diào)整在OnLBut
53、tonDown函數(shù)中的代碼以精確地判定橢圓區(qū)域創(chuàng)建橢圓區(qū)域創(chuàng)建橢圓區(qū)域判斷鼠標(biāo)位置是判斷鼠標(biāo)位置是否在橢圓之內(nèi)否在橢圓之內(nèi)MFC程序示例3n設(shè)備坐標(biāo):以設(shè)備象素為單位,是基本的坐標(biāo)系統(tǒng)(0,0)(0,0)X XY Y1000100010001000如果采用不同的分辨率,如果采用不同的分辨率,則圖形大小則圖形大小(物理尺寸物理尺寸)會發(fā)生變化會發(fā)生變化如何畫一個如何畫一個4厘米高、厘米高、4厘米寬的方塊呢?厘米寬的方塊呢?MFC程序示例3n邏輯坐標(biāo):不同映射模式下有不同單位(0,0)(0,0)X XY Y10001000-1000-1000注意,邏輯坐標(biāo)中注意,邏輯坐標(biāo)中y軸軸的方向不同于設(shè)備坐
54、標(biāo)的方向不同于設(shè)備坐標(biāo)映射種類映射種類映射模式映射模式邏輯單位邏輯單位固定比例映射MM_TEXT(缺省模式)設(shè)備像素MM_LOENGLISH0.01英寸MM_HIENGLISH0.001英寸MM_LOMETRIC0.1mmMM_HIMETRIC0.01mmMM_TWIPS1/1440英寸可變比例映射MM_ISOTROPIC隨窗口尺寸變化MM_ANISOTROPIC隨窗口尺寸變化即便在缺省模式下,邏輯即便在缺省模式下,邏輯坐標(biāo)也不同于設(shè)備坐標(biāo)坐標(biāo)也不同于設(shè)備坐標(biāo)(比比如有滾動條的情況如有滾動條的情況)縱橫比總是縱橫比總是1:1x和和y的比例因子可以獨的比例因子可以獨立地變化立地變化MFC程序示例
55、3n下面的OnDraw函數(shù)繪制一個橢圓,該橢圓隨窗口的大小而變化,正好能在窗口中放下void CMFCExample2View:OnDraw(CDCvoid CMFCExample2View:OnDraw(CDC* * / /* *pDCpDC* */ pDC)/ pDC) CMFCExample2DocCMFCExample2Doc* * pDoc = GetDocument(); pDoc = GetDocument();ASSERT_VALID(pDoc);ASSERT_VALID(pDoc);if (!pDoc)if (!pDoc)return;return;/ TODO: / TOD
56、O: 在此處為本函數(shù)添加繪制代碼在此處為本函數(shù)添加繪制代碼CRect rectClient;CRect rectClient;GetClientRect(rectClient);GetClientRect(rectClient);pDC-SetMapMode(MM_ANISOTROPIC);pDC-SetMapMode(MM_ANISOTROPIC);pDC-SetWindowExt(1000, 1000);pDC-SetWindowExt(1000, 1000);pDC-SetViewportExt(rectClient.right, -rectClient.bottom);pDC-SetV
57、iewportExt(rectClient.right, -rectClient.bottom);pDC-SetViewportOrg(rectClient.right/2, rectClient.bottom/2);pDC-SetViewportOrg(rectClient.right/2, rectClient.bottom/2);pDC-Ellipse(-500, -500, 500, 500);pDC-Ellipse(-500, -500, 500, 500); 獲取客戶區(qū)域的尺寸獲取客戶區(qū)域的尺寸設(shè)定設(shè)定“可變比例可變比例”映射模式映射模式設(shè)定邏輯坐標(biāo)的范圍設(shè)定邏輯坐標(biāo)的范圍設(shè)定邏輯
58、坐標(biāo)范圍對應(yīng)的設(shè)定邏輯坐標(biāo)范圍對應(yīng)的實際區(qū)域大小實際區(qū)域大小設(shè)定坐標(biāo)原點設(shè)定坐標(biāo)原點繪制橢圓繪制橢圓MFC程序示例3n坐標(biāo)變換n一旦設(shè)置了設(shè)備環(huán)境的映射模式,對大多數(shù)(并不是所有的)CDC成員函數(shù)來說,可以以邏輯坐標(biāo)作為其參數(shù)。n但是,從Windows的鼠標(biāo)消息(如OnLButtonDown的point參數(shù))所獲得的鼠標(biāo)指針的坐標(biāo)值卻是設(shè)備坐標(biāo)。許多其他的MFC庫函數(shù),尤其是Crect類的成員函數(shù),則只能在設(shè)備坐標(biāo)下才能正確工作。n在設(shè)置了設(shè)備環(huán)境的映射模式及相應(yīng)的參數(shù)之后,CDC類的LPtoDP和DPtoLP函數(shù)可用來在邏輯坐標(biāo)系和設(shè)備坐標(biāo)系之間進(jìn)行轉(zhuǎn)換n什么時候該使用什么樣的坐標(biāo)系呢?n可
59、以認(rèn)為CDC的大多數(shù)成員函數(shù)都以邏輯坐標(biāo)作為其參數(shù)n可以認(rèn)為CWnd的成員函數(shù)都以設(shè)備坐標(biāo)作為其參數(shù)n所有選中測試(hit-test)操作都應(yīng)該考慮設(shè)備坐標(biāo),區(qū)域的定義應(yīng)采用設(shè)備坐標(biāo)n將一些需要長期使用的值用邏輯坐標(biāo)來保存MFC程序示例3n當(dāng)用戶按下鼠標(biāo)左鍵時,判斷鼠標(biāo)指針是否落在某個矩形(用邏輯坐標(biāo)表示的)之內(nèi),可用如下代碼void CMFCExample2View:OnLButtonDown(UINT nFlags, CPoint point)void CMFCExample2View:OnLButtonDown(UINT nFlags, CPoint point) CRect rect
60、= m_rect;CRect rect = m_rect;CClient dc(this);CClient dc(this);dc.SetMapMode(MM_LOENGLISH);dc.SetMapMode(MM_LOENGLISH);dc.LPtoDP(rect);dc.LPtoDP(rect);if (rect.PtInRect(point)if (rect.PtInRect(point) 建立建立m_rect的臨時拷貝的臨時拷貝獲取當(dāng)前的設(shè)備環(huán)境獲取當(dāng)前的設(shè)備環(huán)境設(shè)置映射模式設(shè)置映射模式將邏輯坐標(biāo)轉(zhuǎn)換為將邏輯坐標(biāo)轉(zhuǎn)換為設(shè)備坐標(biāo)設(shè)備坐標(biāo)判斷鼠標(biāo)位置是否判斷鼠標(biāo)位置是否在矩形之內(nèi)在矩形之內(nèi)MFC程序示例4
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年辦工家具行業(yè)深度研究分析報告
- 2025年血液系統(tǒng)用藥項目規(guī)劃申請報告模式
- 美食廣場裝修合同管理費
- 2024-2030年中國散粉刷行業(yè)市場全景分析及投資策略研究報告
- 2025年中國機(jī)制砂設(shè)備行業(yè)發(fā)展監(jiān)測及投資戰(zhàn)略研究報告
- 在線教育平臺合作合同
- 汽車整車運輸合同保險
- 2024年醫(yī)療健康大數(shù)據(jù)平臺開發(fā)合同
- 2025年工會工作報告(三)
- 2025年法蘭球閥項目提案報告
- 監(jiān)察部部長崗位職責(zé)
- 最高法院示范文本發(fā)布版3.4民事起訴狀答辯狀示范文本
- 2024年英語高考全國各地完形填空試題及解析
- 2024至2030年中國餐飲管理及無線自助點單系統(tǒng)數(shù)據(jù)監(jiān)測研究報告
- 2024年服裝門店批發(fā)管理系統(tǒng)軟件項目可行性研究報告
- 體育概論(第二版)課件第三章體育目的
- 《氓》教學(xué)設(shè)計 2023-2024學(xué)年統(tǒng)編版高中語文選擇性必修下冊
- 化學(xué)元素周期表注音版
- T-GDASE 0042-2024 固定式液壓升降裝置安全技術(shù)規(guī)范
- 香港朗文4B單詞及句子
- 運動技能學(xué)習(xí)與控制課件第五章運動中的中樞控制
評論
0/150
提交評論