![MFC設(shè)計應(yīng)用程序的基礎(chǔ)知識.doc_第1頁](http://file.renrendoc.com/FileRoot1/2020-1/11/d71fb6f1-1366-489c-a129-44375b1ff834/d71fb6f1-1366-489c-a129-44375b1ff8341.gif)
![MFC設(shè)計應(yīng)用程序的基礎(chǔ)知識.doc_第2頁](http://file.renrendoc.com/FileRoot1/2020-1/11/d71fb6f1-1366-489c-a129-44375b1ff834/d71fb6f1-1366-489c-a129-44375b1ff8342.gif)
![MFC設(shè)計應(yīng)用程序的基礎(chǔ)知識.doc_第3頁](http://file.renrendoc.com/FileRoot1/2020-1/11/d71fb6f1-1366-489c-a129-44375b1ff834/d71fb6f1-1366-489c-a129-44375b1ff8343.gif)
![MFC設(shè)計應(yīng)用程序的基礎(chǔ)知識.doc_第4頁](http://file.renrendoc.com/FileRoot1/2020-1/11/d71fb6f1-1366-489c-a129-44375b1ff834/d71fb6f1-1366-489c-a129-44375b1ff8344.gif)
![MFC設(shè)計應(yīng)用程序的基礎(chǔ)知識.doc_第5頁](http://file.renrendoc.com/FileRoot1/2020-1/11/d71fb6f1-1366-489c-a129-44375b1ff834/d71fb6f1-1366-489c-a129-44375b1ff8345.gif)
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
vc-6第六章 MFC設(shè)計應(yīng)用程序的基礎(chǔ)知識基于Windows API的程序設(shè)計有著其明顯的不足之處,哪就是它是建立在函數(shù)的基礎(chǔ)之上,采用的是一種面向過程的程序設(shè)計思想。為了更好地支持基于Windows的應(yīng)用開發(fā),Microsoft在發(fā)布VC6.0的同時,還發(fā)布了微軟基礎(chǔ)類庫6.0版(Microsoft Foundation Class Library 6.0 簡稱MFC6.0),所謂微軟基礎(chǔ)類庫實際上是指一套封裝了開發(fā)基于Windows應(yīng)用程序所需函數(shù)集的類庫,該類庫為編寫基于Windows的應(yīng)用程序提供了大量的可重用代碼。它為應(yīng)用程序構(gòu)建了一個主要的框架,程序設(shè)計人員只需在此基礎(chǔ)上添加特定的代碼就可以了很容易地實現(xiàn)用戶所需的功能。同時,使用MFC進(jìn)行應(yīng)用開發(fā)是建立在面向?qū)ο筮@一程序設(shè)計思想之上的,這使得程序員可以充分利用面向?qū)ο蠼o應(yīng)用開發(fā)所提供的一些便利,從而大大提高工作效率。6.1 MFC的綜述MFC6.0是一個專門為那些在Microsoft Windows操作系統(tǒng)中采用C編寫應(yīng)用程序的程序員設(shè)計的一個類庫。MFC已經(jīng)經(jīng)過了很多年的發(fā)展,現(xiàn)在的最新版本是MFC6.0版本。6.1.1 MFC的發(fā)展歷程1992年4月,第一個MFC版本伴隨著Microsoft C/C+ 7.0版一起發(fā)布。這個32位的版本是作為Win32 Prerelease Development Kit中的一部分提供給廣大用戶的。當(dāng)時的MFC1.0中主要包括兩種類型的類:一種是用于應(yīng)用程序中非圖形部分的類和用于應(yīng)用程序的圖形用戶界面(Graphics Device Interface 和GDI)功能的Windows相關(guān)類。1993年2月,MFC2.0伴隨著Visual C+1.0版一起發(fā)布。其被擴(kuò)展后的核心功能包括一些新的構(gòu)造類,這些構(gòu)造類有助于組織和構(gòu)造應(yīng)用程序,以及對Windows應(yīng)用程序中部分界面元素的高層抽象,這些高層抽象有助于程序員優(yōu)化界面,使得應(yīng)用程序更易操作。1993年12月,MFC與Visual C+ 1.5一起發(fā)布。這一版本的MFC添加了對數(shù)據(jù)庫的支持,程序員可以通過ODBC(Open Database Connet,開放數(shù)據(jù)庫互聯(lián),簡稱ODBC)對任何數(shù)據(jù)源進(jìn)行存取,并且這一版本的MFC還全面支持OLE的眾多性能,不過這一版本的MFC是基于16位的應(yīng)用程序開發(fā)的。1994年9月,MFC3.0作為Visual C+2.0的一部分公開發(fā)布,這個版本的MFC增添了對開發(fā)32位應(yīng)用程序的支持,具有更多風(fēng)格的用戶界面,以及對Win32 API和OLEControl擴(kuò)展的更多支持。MFC3.0將MFC的影響擴(kuò)展到大多數(shù)基于Win32應(yīng)用程序的核心底層結(jié)構(gòu)。隨后的兩個版本中有添加了對Windows公共控件和 Sockets等的支持。1995年10月推出的MFC4.0中包含了在Windows95和Windows NT操作系統(tǒng)中大多數(shù)新的Windows公共控件,進(jìn)一步支持OLE的擴(kuò)展功能,使得開發(fā)人員可以建立、使用并且可以和其他開發(fā)人員共享OLE控件。MFC4.0除了繼續(xù)增強(qiáng)對ODBC的支持外還提供了一種新的數(shù)據(jù)存取對象(Data Access Object 簡稱DAO)類,通過DAO類,程序員可以直接存取Miscrosoft Jet數(shù)據(jù)庫引擎,它是一種和Microsoft Access for Windows 95和Miscrosoft Visual Basic中的引擎完全相同的引擎。DAO類包含了Jet數(shù)據(jù)庫引擎的OLE COM接口,開發(fā)人員不必親自編寫SQL程序就可以實現(xiàn)對數(shù)據(jù)庫的操作。開發(fā)人員使用ODBC數(shù)據(jù)庫類時,他們可以打開并除了數(shù)據(jù)庫和記錄集,而且可以在窗體視圖中顯示數(shù)據(jù)。當(dāng)使用DAO類時,程序員也可以建立、使用工作空間,創(chuàng)建并處理表和查詢,而且可以通過使用SQL數(shù)據(jù)定義語言來創(chuàng)建和使用這些表達(dá)的索引。MFC4.0中還引進(jìn)了現(xiàn)程同步對象的概念,為了管理線程的同步操作,MFC4.0提供了一個新的基類CSyncObject,以及代表公用同步技術(shù)的幾個派生對象。MFC4.0中還提供了對Windows 的消息應(yīng)用程序編程接口(Message Application Programming Interface 簡稱MAPI)的支持,通過MFC的這一擴(kuò)展,程序員可以很容易開發(fā)出用于建立、處理、轉(zhuǎn)送以及存儲郵件消息的應(yīng)用程序。MFC4.0還進(jìn)一步增強(qiáng)了對Windows Sockets的支持,通過MFC4.0可以很容易地實現(xiàn)在Windows 操作系統(tǒng)環(huán)境下的網(wǎng)絡(luò)通信程序。MFC5.0增強(qiáng)了對數(shù)據(jù)庫應(yīng)用程序的支持,可以使用ODBC類和高性能的ODBC驅(qū)動程序來訪問各種數(shù)據(jù)庫管理系統(tǒng)??梢酝ㄟ^數(shù)據(jù)訪問對象(DAO)類通過編程語言來訪問和操縱數(shù)據(jù)庫中的數(shù)據(jù)并管理數(shù)據(jù)庫、數(shù)據(jù)庫對象與結(jié)構(gòu)。同時在MFC5.0中對Internet提供了強(qiáng)有力的支持,這些支持主要包括以下幾個部分:l Win32 Internet API(WinInet)使Internet成為應(yīng)用程序的一部分并簡化了對Internet服務(wù)的訪問。l Acrivex文檔可以顯示在整個Web瀏覽器或OLE容器的整個客戶窗口中。l Activex控件可以用在Internet和桌面應(yīng)用程序中。l Asychronous Monikers使應(yīng)用程序可以一步下載文件和控件。l 可以使用CHttpServer、CHttpFilter、CHttpServerContext、CHttpFilterContext和CHttpSream類來建立動態(tài)連接庫以便添加功能到Internet服務(wù)器中和Web頁面中?,F(xiàn)在的最新MFC版本是MFC6.0,在MFC6.0中引進(jìn)了許多新的功能,使得MFC在應(yīng)用開發(fā)方面的功能更趨完善。MFC6.0中引進(jìn)的功能大致包含以下方面:l 提出了活動文檔容器來管理不同類型的文檔,并通過引入類COleDocObjectItem來加以實現(xiàn)。同時在應(yīng)用程序向?qū)е幸布尤肓藢@一新特性的支持。l 加入了對動態(tài)HTML技術(shù)的支持,通過引入一個新類CHtmlView,使程序員開發(fā)的應(yīng)用程序可以瀏覽并顯示用動態(tài)HTML技術(shù)開發(fā)的HTML文檔。類CHtmlView中封裝了許多瀏覽器的特征,包括瀏覽器在歷史記錄、書簽和安全等方面的特征都被封裝進(jìn)了類CHtmlView。l 擴(kuò)展了對Internet Explorer4.0中的公共控件的支持,表6-1中列出了這些控件的名稱和其功能的簡單描述。表6-1 MFC6.0中對IE4.0中公共控件的擴(kuò)展MFC中新增的控件類控件名簡介CComboBox擴(kuò)展的下列列表選擇框擴(kuò)展了對圖形列表的支持CDateTimeCtrl時間選擇控件支持文本對話框和日歷兩種方式對時間進(jìn)行修該CHeaderCtrl頭控件支持顯示位圖和拖放操作CImageList圖形列表支持正在被其他控件使用的圖象的列表顯示CIPAdressCtrl地址控件提供一個用于操縱IP地址的文本編輯框CListCtrl列表控件支持項目分組和虛擬列表視圖CMonthCalCtrl日歷控件顯示一個日歷型的界面供用戶選擇日期CProgressCtrl進(jìn)度條控件支持平滑遞增進(jìn)度和處置方向上的進(jìn)度條風(fēng)格CStatusBarCtrl狀態(tài)條支持對消息提示,顯示圖標(biāo)和設(shè)置背景色等新屬性l 新增了兩個全局函數(shù)AfxCheckError和AfxDumpStack。l 增加了對Windows 98和Windows NT5.0中屬性表和屬性頁的支持。6.1.2 MFC6.0的特色代碼重用是C長期尋求的目標(biāo)。對于C程序員而言,重用通常是指從先前已有的基類派生新的C類的技術(shù)。MFC正好提供了大量的基類工程序員根據(jù)不同的應(yīng)用環(huán)境進(jìn)行擴(kuò)充。MFC提供的類庫對程序設(shè)計的高度抽象,使得程序員的主要精力不用放在程序設(shè)計的細(xì)節(jié)實現(xiàn)上,而是放在程序的功能拓展上面。同時允許自定義和擴(kuò)展應(yīng)用程序中的類,MFC6.0同時還允許對Windows API進(jìn)行存取,而且它對源代碼進(jìn)行精確的調(diào)整與優(yōu)化,從而是使應(yīng)用程序能以最小的規(guī)模實現(xiàn)最豐富的功能,同時實現(xiàn)運行時的高效率。MFC使用了C語言中的一個安全子集,而且它被設(shè)計成可以讓編程人員利用它們關(guān)于Windows API編程的知識類設(shè)計他們的應(yīng)用程序。MFC程序設(shè)計人員不必是一個理解C全部細(xì)節(jié)和特性的專家。當(dāng)然,經(jīng)驗豐富的C開發(fā)人員可以使用MFC實現(xiàn)C中的高級功能。MFC類庫本身也為開發(fā)人員進(jìn)行程序設(shè)計提供了一個源程序的范例。它既是專業(yè)性很強(qiáng)的C源程序,同時也是進(jìn)行Windows程序設(shè)計的程序典范。MFC將大大簡化使用C開發(fā)基于Windows的應(yīng)用程序的工作,MFC精心設(shè)計的類庫結(jié)構(gòu),以一種直觀的軟件包的形式把進(jìn)行Windows應(yīng)用開發(fā)這一過程所需的各種程序模塊有機(jī)地組織起來。MFC被設(shè)計成可移植于眾多的平臺,允許其應(yīng)用程序適用于多種不同平臺。對于多種編譯器,MFC也是可以移植的,而且許多擁有MFC許可證的公司已經(jīng)把它作為一種基于Windows開發(fā)的標(biāo)準(zhǔn)應(yīng)用程序構(gòu)架。Microsoft計劃繼續(xù)擴(kuò)展,改進(jìn)MFC以支持應(yīng)用程序中的新功能,跟上軟件技術(shù)的新潮流。MFC之所以得名為微軟基礎(chǔ)類庫,是因為它代表著正在不斷帶給Windows操縱系統(tǒng)中開發(fā)人員以最好支持的基本類結(jié)構(gòu)。它所包含的類分層結(jié)構(gòu)和功能已被設(shè)計成可伸縮性的。它的這種可伸縮性使得MFC始終能跟蹤上軟件發(fā)展的潮流,而且在功能擴(kuò)展的同時,MFC還很好地保持了程序的向后兼容性。6.2 MFC6.0中類的組織結(jié)構(gòu)MFC6.0中包含了100多個類,不同的類實現(xiàn)不同的功能,類之間既有區(qū)別又有聯(lián)系。MFC同時還是一個應(yīng)用程序框架,它幫助定義應(yīng)用程序的結(jié)構(gòu),以及為應(yīng)用程序處理許多雜務(wù),事實上,MFC封裝了一個程序操作的每一個方面。在MFC程序中,程序員很少需要直接調(diào)用Windows API函數(shù),而是通過定義MFC類的對象并通過調(diào)用對象的成員函數(shù)來實現(xiàn)相應(yīng)的功能。MFC中的類大致可以分成以下六個范疇:1) CObject類 2) 應(yīng)用程序結(jié)構(gòu)類3) 可視組件類4) OLE類5) 數(shù)據(jù)庫類6) 通用類6.2.1 CObject類MFC中大多數(shù)類都是由CObject類直接或間接派生出來的。CObject類也可以作為用戶自定義類的基類,CObject對其派生類提供了三種基本操作。1) 串行化2) 允許時的類信息3) 診斷輸出串行化是對象本身往返于存儲介質(zhì)的一個存儲過程。串行化的結(jié)果是使數(shù)據(jù)“固定”在存儲介質(zhì)上。CObject定義兩個在串行化中其重要作用的成員函數(shù):Serialize和IsSerializable。程序可以調(diào)用一個由CObject派生的對象的IsSerializable函數(shù)來確定該對象是否支持串行化操作。建立一個支持串行化的類的步驟之一是重載繼承自CObject類的Serialize函數(shù),并提供串行化數(shù)據(jù)成員的派生類的專用代碼。例如,假設(shè)有一個類Student直接繼承自類CObject,派生類中包含了一個學(xué)生的學(xué)號(StuNo)、姓名(StuName)和年齡(StuAge)等信息,這個Student類的Serialize函數(shù)可以寫成如下所示的程序段。void Studnt :Serialize(CArchive& ar)CObject:Serialize(ar);if(ar.IsStoring)arStuNoStuName StuNoStuNameStuAge;類Student的對象首先調(diào)用基類的Serialize函數(shù),這樣基類就可以保存它的數(shù)據(jù)成員。然后,類Student的對象再調(diào)用CArchive類的對象ar的IsStoring函數(shù)以確認(rèn)數(shù)據(jù)是否正在流入或者流出,并利用由CArchive提供的“”運算符以保存或者還原它自己的數(shù)據(jù)成員。CArchive是MFC中提供的用于保存數(shù)據(jù)的類,可以認(rèn)為類CArchive的對象是一個二進(jìn)制流。CArchive類的對象和一個文件相聯(lián)系,該對象允許緩沖區(qū)中的數(shù)據(jù)存入文件,同時它也允許數(shù)據(jù)從文件中讀入數(shù)據(jù)到緩沖區(qū)中,CArchive類的對象相當(dāng)于一個物理介質(zhì)上的文件和內(nèi)存之間聯(lián)系的橋梁。在創(chuàng)建一個CArchive類的對象之前,程序員必須創(chuàng)建一個CFile或者其派生類的對象。但是,在調(diào)用CArchive類的構(gòu)造函數(shù)CArchive創(chuàng)建類CArchive的對象時,該構(gòu)造函數(shù)將自動創(chuàng)建一個CFile類的對象。CArchive類的對象不僅能處理普通的數(shù)據(jù)類型的流入流出,而且還能處理CObject類及其派生類對象的流出流入。CArchive類的對象和CFile類的對象一起進(jìn)行工作進(jìn)行物理磁盤的輸入輸出,并緩沖進(jìn)行輸入輸出的數(shù)據(jù)使性能優(yōu)化。CObject的派生類同時還支持運行時類型信息。運行時的類型信息機(jī)制就允許程序檢索對象的類名及其他信息。CObject提供兩個成員函數(shù)來支持運行時類型信息:IsKindOf和GetRuntimeClass。函數(shù)IsKindOf指示一個對象是否屬于規(guī)定的類或者是從規(guī)定的類中派生出來的。其原型如下:BOOL IsKindOf( const CRuntimeClass* pClass ) const;例如,如果對象Object1是類CWnd或者CWnd類的派生類,則下面的語句返回TRUE。Object1-IsKindOf(RUNTIME_CLASS(CWnd);上面語句中的RUNTIME_CLASS是MFC中預(yù)定義的一個宏命令,該宏命令執(zhí)行的結(jié)果是返回一個指向CRuntimeClass類對象的指針。一個CRuntimeClass類對象中包含了一個類的運行時信息,包括這個類的類名,基類名等信息。通過它就可以很容易或得一個指定類的運行時刻信息。函數(shù)GetRuntimeClass的功能也是返回一個包含指定類的運行時信息的CRuntimeClass類對象的指針。其原型定義如下:virtual CRuntimeClass* GetRuntimeClass( ) const;例如,下面的語句通過函數(shù)GetRuntimeClass獲得類CAge的動態(tài)信息,并把獲得的信息保存在CRuntimeClass型指針變量中。CAge a(21);CRuntimeClass* prt = a.GetRuntimeClass();CObject還為其派生類提供診斷支持。CObject中提供的虛擬成員函數(shù)AssertValid指示一個對象利用一系列的斷言對其本身進(jìn)行有效性檢查,虛擬成員函數(shù)Dump進(jìn)行對象的數(shù)據(jù)成員的診斷轉(zhuǎn)儲,這對程序調(diào)試有很大幫助。其中函數(shù)AssertValid的原型在CObject類中聲明為下:virtual void AssertValid( ) const;函數(shù)AssertValid能對一個對象的內(nèi)部數(shù)據(jù)成員進(jìn)行檢查,如果出現(xiàn)錯誤(如數(shù)據(jù)成員中包含了對空指針的使用),則顯示一個錯誤所在文件名并終止程序的執(zhí)行。派生類中重載的函數(shù)AssertValid通常調(diào)用父類的函數(shù)AssertValid對父類的成員進(jìn)行檢查,然后再對派生類中的特定成員進(jìn)行檢查。例如,在直接從CObject中派生的類CAge的AssertValid函數(shù)中,先調(diào)用父類(CObject)中的AssertValid函數(shù)對父類本身的成員進(jìn)行有效性檢查,然后調(diào)用MFC預(yù)定義的ASSERT宏命令對自身的成員進(jìn)行檢查。void CAge:AssertValid() const /派生類CAge的AsserValid函數(shù)的實現(xiàn) CObject:AssertValid(); /調(diào)用父類CObject的AssertValid函數(shù) ASSERT( m_years 0 ); /對CAge特有的數(shù)據(jù)成員m_years進(jìn)行有效性檢查ASSERT( m_years 105 ); /對CAge特有的數(shù)據(jù)成員m_years進(jìn)行有效性檢查上述語句中ASSERT宏命令對一個邏輯表達(dá)式進(jìn)行判斷,如果該表達(dá)式的值為0,則ASSERT宏命令將打印一條診斷消息并終止程序的執(zhí)行,打印的診斷消息一般具有如下的形式:assertion failed in file in line 這樣程序員就可以通過該診斷信息對程序進(jìn)行修該。如果ASSERT后的表達(dá)式的值不為0,則該語句將不顯示任何的信息,也不終止程序的執(zhí)行。利用ASSERT宏命令就可以很方便地實現(xiàn)診斷支持,例如,CAge類的AssertValid函數(shù)用ASSERT宏命令來檢查它的數(shù)據(jù)成員m_years是否大于0,如果出現(xiàn)m_years的值為非正的情況,則表示程序在某個地方出現(xiàn)了錯誤,比如,在初始化時程序員對m_years設(shè)定了不合理的初始值,或者程序的其他地方不合理的修該了m_years值。通過診斷信息,程序員就可以判斷出程序出現(xiàn)錯誤的地方,從而迅速采取相應(yīng)的措施。事實上ASSERT命令不一定只能用在類的AssertValid函數(shù)之中,它可以用在任何需要進(jìn)行對程序進(jìn)行診斷的地方。例如:下面的語句調(diào)用ASSERT宏命令對指針pcage進(jìn)行檢查。CAge* pcage = new CAge( 21 ); ASSERT( pcage!= NULL ) ;ASSERT( pcage-IsKindOf( RUNTIME_CLASS( CAge ) ) );函數(shù)Dump把類的信息轉(zhuǎn)儲到一個CDumpContext類的對象(通常是系統(tǒng)預(yù)定義的afxDump對象)中,函數(shù)Dump在類CObject定義中聲明的原型如下:virtual void Dump( CDumpContext& dc ) const;用戶在派生類中重載函數(shù)Dump時通常先調(diào)用父類的成員函數(shù)Dump以便對父類的信息進(jìn)行轉(zhuǎn)儲。然后再對自己特有的成員進(jìn)行轉(zhuǎn)儲。void CAge:Dump( CDumpContext &dc ) const CObject:Dump( dc ); /調(diào)用父類的Dump函數(shù) dc Age = m_years; /對特定的成員進(jìn)行轉(zhuǎn)儲 其中類CDumpContext能把面向流式輸出的診斷信息以文本方式輸出,診斷轉(zhuǎn)儲時,程序員可以使用系統(tǒng)預(yù)定義類CDumpContext的對象afxDump來進(jìn)行診斷信息的轉(zhuǎn)儲。類CDumpContext重載了插入運算符“”,重載后的插入運算符“”能處理多中數(shù)據(jù)類型的數(shù)據(jù),而且能處理從CObject派生出的類對象。CDumpContext類包含的成員如表6-2所示。表6-2 CDumpContext類的成員成員類型成員名功能描述構(gòu)造函數(shù)CDumpContext創(chuàng)建一個類CDumpContext類的對象基本的輸入/輸出函數(shù)Flush轉(zhuǎn)儲任意數(shù)據(jù)類型的數(shù)據(jù)到轉(zhuǎn)儲表緩沖區(qū)中HexDump以十六進(jìn)制的格式存儲信息設(shè)置轉(zhuǎn)儲表狀態(tài)GetDepth獲取轉(zhuǎn)儲表的深度SetDepth設(shè)置轉(zhuǎn)儲表的深度CObject還重載了新建(new)和刪除(delete)操作符,重載后的新建(new)和刪除(delete)操作符可以有效防治內(nèi)存泄漏。通過類的繼承關(guān)系,凡是CObject類的派生類都能通過繼承得到重載過的新建(new)和刪除(delete)操作符。6.2.2 應(yīng)用程序結(jié)構(gòu)類應(yīng)用程序結(jié)構(gòu)類影響一個MFC應(yīng)用程序的表單和結(jié)構(gòu)。CWinApp表示應(yīng)用程序本身,幾乎所有的基于MFC的應(yīng)用程序都是從CWinApp派生一個類,并通過創(chuàng)建這個派生類的對象來創(chuàng)建一個應(yīng)用程序?qū)ο?。CWinApp類的繼承關(guān)系如圖6-1所示。圖6-1 CWinApp類在MFC中繼承關(guān)系CWinApp類中包含了若干個公有的數(shù)據(jù)成員,部分?jǐn)?shù)據(jù)成員如表6-3所示。表6-3 CWinApp類中定義的部分?jǐn)?shù)據(jù)成員數(shù)據(jù)成員名功能描述m_pszAppName保存應(yīng)用程序的名稱m_hInstance標(biāo)識當(dāng)前的應(yīng)用程序?qū)嵗齧_lpCmdLine指向應(yīng)用程序的命令行參數(shù)的指針m_nCmdShow指定窗口初始顯示的風(fēng)格m_bHelpMode指定在用戶按下SHIFT+F1鍵時是否作出相應(yīng)的幫助響應(yīng)m_pActiveWnd指向容器應(yīng)用程序主窗口的指針m_pszExeName應(yīng)用程序可指向文件模塊的名稱m_pszHelpFilePath應(yīng)用程序的幫助文件的路徑m_pszProfileName應(yīng)用程序初始化(.INI)文件名m_pszRegistryKey決定應(yīng)用程序的初始化文件的存放地點。CWinApp類中包含了若干個公有的成員函數(shù),部分公有函數(shù)如表6-4所示。表6-4 CWinApp類中的公有成員函數(shù)函數(shù)名功能描述CWinApp構(gòu)造應(yīng)用程序?qū)ο驦oadCursor向應(yīng)用程序中加載光標(biāo)資源LoadStandardCursor向應(yīng)用程序中加載系統(tǒng)缺省定義的標(biāo)準(zhǔn)光標(biāo)LoadIcon向應(yīng)用程序中加載圖標(biāo)資源LoadStandardIcon向應(yīng)用程序中加載系統(tǒng)預(yù)定義的圖標(biāo)資源ParseCommandLine對命令行中的參數(shù)和標(biāo)志進(jìn)行分析ProcessShellCommand處理命令行中的參數(shù)和標(biāo)志GetProfileInt從程序的INI文件中獲取一個整數(shù)值WriteProfileInt向程序的INI文件中寫入一個整數(shù)值GetProfileString從程序的INI文件中獲取一個字符串WriteProfileString向程序的INI文件中寫入一個字符串AddDocTemplate向應(yīng)用程序的文檔模板列表中加入一個文檔模板GetFirstDocTemplatePosition獲取文檔模板列表中第一個文檔模板的位置GetNextDocTemplate獲取文檔模板列表中下一個文檔模板對象OpenDocumentFile打開一個文檔對象AddToRecentFileList加入一項到文件歷史記錄列表SelectPrinter選擇打印機(jī)CreatePrinterDC創(chuàng)建一個打印機(jī)設(shè)備場境CreatePrinterDC獲取打印機(jī)的缺省設(shè)置InitInstance執(zhí)行程序的初始化操作Run啟動缺省的消息循環(huán)OnIdle應(yīng)用程序閑置時的處理程序ExitInstance結(jié)束應(yīng)用程序的操作HideApplication在關(guān)閉所有的文檔對象前隱藏應(yīng)用程序CloseAllDocuments關(guān)閉所有打開的文檔對象PreTranslateMessage過濾消息SaveAllModified提示用戶保存修該過的文檔對象DoMessageBox彈出一個消息框ProcessMessageFilter截取特定的消息ProcessWndProcException截取未曾處理的例外DoWaitCursor是關(guān)閉變成等待形狀OnDDECommand響應(yīng)動態(tài)數(shù)據(jù)交換WinHelp調(diào)用Windows API中的WinHelp函數(shù)LoadStdProfileSettings加載標(biāo)準(zhǔn)的INI文件設(shè)置SetDialogBkColor設(shè)置對話框的缺省背景色SetRegistryKey使應(yīng)用程序的設(shè)置保存在注冊表中,而不是保存在INI文件中EnableShellOpen從Windows的文件管理器中打開數(shù)據(jù)文件RegisterShellFileTypes注冊在應(yīng)用程序中使用的文檔類型Enable3dControls使窗口中的控件具有三維外觀OnFileNew響應(yīng)標(biāo)識號為ID_FILE_NEW的命令OnFileOpen響應(yīng)標(biāo)識號為ID_FILE_OPEN的命令OnFilePrintSetup響應(yīng)標(biāo)識號為ID_FILE_PRINT_SETUP的命令OnContextHelp響應(yīng)用戶按下SHIFT+F1這一動作OnHelp響應(yīng)用戶按下F1這一動作OnHelpIndex響應(yīng)標(biāo)識符為ID_HELP_INDEX的命令OnHelpFinder響應(yīng)標(biāo)識符為ID_DEFAULT_HELP的命令OnHelpUsing響應(yīng)標(biāo)識符為ID_HELP_USING的命令 值得注意的是,在CWinApp中定義的部分函數(shù)的功能也可以通過MFC提供的全局函數(shù)來實現(xiàn),這些全局函數(shù)都具有這些“Afx”的前綴。例如AfxMessageBox調(diào)用該函數(shù)將彈出一個消息框,它的功能和CWinApp中的DoMessageBox相同。AfxMessageBox在MFC中定義的原型如下:int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 );調(diào)用該函數(shù)時,如果系統(tǒng)沒有足夠的內(nèi)存空間生成消息框,則該函數(shù)的返回值為0,否則將返回表6-5中所列值之一。表6-5 AfxMessageBox函數(shù)的非0返回值返回值含義IDABORT用戶在消息框中單擊了Abort按鈕IDCANCEL用戶在消息框中單擊了Cancel按鈕IDIGNORE用戶在消息框中單擊了Ignore按鈕IDNO用戶在消息框中單擊了No按鈕IDOK用戶在消息框中單擊了No按鈕IDRETRY用戶在消息框中單擊了Retry按鈕IDYES用戶在消息框中單擊了Yes按鈕另一個重要的類是CWinThread,它封裝操作系統(tǒng)的線程化功能。CWinThread對象表示一個執(zhí)行的線程,成員函數(shù)如CreateThread、SetThreadPriority和SuspendThread提供MFC程序用來創(chuàng)建和操作線程的工具。CWinThread還通過利用線程局部數(shù)據(jù)來維護(hù)個體線程特定信息,是MFC程序線程安全。CWinApp本身是從CWinThread派生出來的,因為在多線程環(huán)境中,例如Windows 95中,每一個應(yīng)用程序均以執(zhí)行一個單線程的形式開始其生存的。CDocument類為用戶自定義的文檔類提供了基本的功能支持,其在MFC中的繼承關(guān)心如圖6-2所示。在MFC中,一個文檔代表的是一個數(shù)據(jù)單元,用戶通常用File Open命令打開一個文檔,用File Save命令來保存文檔,基于這些文檔的共性,NFC提供了一個CDocument類來對此進(jìn)行封裝。CDocument 支持標(biāo)準(zhǔn)的文檔操作,這些操作包括創(chuàng)建一個文檔,下載一個文檔、保存文檔。應(yīng)用程序框架使用由CDocument類提供的接口來操縱文檔對象。一個應(yīng)用程序可以操縱一個以上的文檔類型,每一種文檔類型都有一個相聯(lián)系的文檔模板(document template)。一個文檔模板指定了該文檔所需的資源 (例如menu、icon或者accelerator table) 每一個文檔對象都包含一個指向其相聯(lián)的文檔模板(CDocTemplate)對象的指針。圖6-2 CDocument類在MFC中的繼承關(guān)系用戶通過和文檔相關(guān)聯(lián)的視圖對象(CView object)和文檔進(jìn)行交互。一個視圖顯示文檔中的信息,并把用戶的在框架窗口內(nèi)的操作轉(zhuǎn)換成對文檔的相應(yīng)命令。當(dāng)用戶在一個文檔打開一個窗口時,應(yīng)用程序?qū)嶋H上創(chuàng)建了一個視圖并且把這個視圖和相應(yīng)的文檔聯(lián)系在一起。文檔模板指定了視圖的類型和和顯示每中文檔的相對應(yīng)的窗口。 當(dāng)一個文檔中的數(shù)據(jù)被修改時,每一個與此文檔相關(guān)聯(lián)的視圖都必須反應(yīng)出所作的更改。CDocument類提供了一個UpdateAllViews 成員函數(shù)來修改所有和該文檔相聯(lián)系的視圖。視圖在需要的時候可以重畫它們自己。當(dāng)用戶關(guān)閉未曾保存的文件時,應(yīng)用程序?qū)棾鲆粋€消息框提示用戶保存對文檔所作的修改。當(dāng)應(yīng)用程序中使用CDocuments 類時,必須實現(xiàn)以下步驟: 1) 從CDocument為每一種文檔類型派生一個子類。2) 添加成員變量以儲存文檔數(shù)據(jù)。3) 實現(xiàn)對文檔數(shù)據(jù)進(jìn)行讀寫,修改的成員函數(shù)。4) 在用戶自定義的文檔類中重載CObject:Serialize成員函數(shù)以實現(xiàn)從磁盤上對文檔數(shù)據(jù)的讀和寫CDocument類還支持通過電子郵件的方式發(fā)送文檔數(shù)據(jù)。CView類為用戶自定義視圖類提供了最基本功能的支持。CView類在MFC中的繼承關(guān)系如圖6-3所示。一個視圖充當(dāng)了溝通用戶和文檔對象的中間橋梁的作用,一個視圖以圖形方式顯示文檔數(shù)據(jù)、接收用戶輸入并將其解釋成為對文檔的操作。圖6-3 CView類在MFC中的繼承關(guān)系一個視圖是一個框架窗口的子窗口,可以是幾個視圖共享一個視圖。CDocTemplat類的對象中包含了關(guān)于視圖類,框架窗口類和文檔類之間的關(guān)系信息。當(dāng)用戶打開一個新窗口的時候,框架窗口類將新建一個視圖類,并把這個新建的視圖類和一個文檔類聯(lián)系在一起。一個視圖只能和一個文檔發(fā)生聯(lián)系,但是一個文檔卻可以和很多的視圖發(fā)生聯(lián)系。視圖能對用戶的鍵盤輸入,鼠標(biāo)輸入作出響應(yīng),視圖在框架窗口前處理用戶的操作,如果視圖不能處理用戶發(fā)出的某個命令,視圖就把相應(yīng)的命令發(fā)送給相聯(lián)系的文檔對象進(jìn)行處理。視圖能顯示和修改文檔數(shù)據(jù),但是它不能儲存文檔數(shù)據(jù)。文檔向視圖提供了關(guān)于本文檔的足夠的信息。程序員可以讓視圖直接訪問文檔的數(shù)據(jù)成員,或者在文檔類中定義一個成員函數(shù)供視圖調(diào)用。當(dāng)文檔中的數(shù)據(jù)發(fā)生變化時,視圖通過調(diào)用文檔類的CDocument:UpdateAllViews 函數(shù)來對文檔中的數(shù)據(jù)發(fā)生改變作出響應(yīng)。CDocument:UpdateAllViews 函數(shù)將通知所有和更改過的文檔相關(guān)的視圖作相應(yīng)的調(diào)整,以反映出修改后的文檔對象。 應(yīng)用程序中使用視圖,用戶可以從CView類中派生一個派生類,在派生類中實現(xiàn) OnDraw成員函數(shù)以執(zhí)行對文檔的顯示,用戶也可以通過OnDraw 函數(shù)來實現(xiàn)打印和打印預(yù)覽。視圖對象用CWnd:OnHScroll,CWnd:OnVScroll來響應(yīng)滾動條消息。用戶可以在這兩個函數(shù)中實現(xiàn)自己的滾動條消息處理函數(shù)。在MFC中還有九個類是從CView類派生出來的。這些類的一些簡要介紹見表6-6所示。表6-6 CView的派生類派生類名功能簡介CScrollView帶有滾動條的視圖CCtrlView帶有樹狀、列表框等控件的視圖CDaoRecordView在一個對話框中顯示數(shù)據(jù)庫記錄的視圖(主要用于處理DAO的查詢結(jié)果)CEditView一個提供多行文本編輯器的視圖CFormView一個基于表單模板的視圖CListView帶有列表框控件的視圖CRecordView在一個對話框中顯示數(shù)據(jù)庫記錄的視圖CRichEditView一個具有格式文本編輯功能的編輯控件的視圖CTreeView一個具有樹狀控件的視圖CView類還有一個專用于實現(xiàn)打印預(yù)覽功能的派生類CPreviewView。這個類提供了對打印預(yù)覽窗口的獨有特征的支持。對于一般的打印預(yù)覽功能,在類CPreviewView 中已經(jīng)得到很好的實現(xiàn),程序員可以直接調(diào)用類CPreviewView 中的方法即可。視圖是與文檔聯(lián)系在一起的,它們之間的關(guān)系可以用圖6-4來表示。圖6-4 文檔和視圖的關(guān)系CWinApp,CDocument及許多的其他類都是從類CCmdTarget中派生來的。這些類一般都是用于MFC的消息映像結(jié)構(gòu)中?;贛FC的應(yīng)用程序一般不用窗口函數(shù)來處理消息,而是成員函數(shù)來處理消息。當(dāng)一個消息到達(dá)時,框架激活成員函數(shù)。一個繼承自類CCmdTarget的派生類具有接收一個消息的能力,并對收到的消息加以處理。在MFC中,也只有繼承自類CCmdTarget的派生類才具有接收并處理消息的能力。這就是為什么所有的MFC應(yīng)用程序、窗口、文檔和視圖都是直接或間接地從類CCmdTarget中派生出來的原因。6.2.3 可視對象類當(dāng)一個基于Windows的程序運行時,可視對象類封裝了屏幕上可視的大部分對象,包括窗口,對話框,菜單等各種類型的組件。他們還封裝了Windows設(shè)備描述表及GDI圖形對象,如位圖、畫刷和畫筆。一部分可視對象類的基類是CWnd類,CWnd類定義了窗口的基本功能,并包括數(shù)十個用各種方式操縱窗口的成員函數(shù)。CWnd中還定義了對大多數(shù)消息的默認(rèn)響應(yīng)。CWnd有時被直接使用,但更多時候,應(yīng)用程序使用的是該類的派生類。這些派生出的類包括l CFrameWnd類:CFrameWnd類用來為文檔提供一個頂層窗口。l CControlBar類:CControlBar類作為工具欄,狀態(tài)欄和其他MFC組件的基類。l CDialog類:封裝對話框的功能。CWnd類和消息映射機(jī)制隱藏了窗口函數(shù)WndProc。一個Windows消息通過消息映射發(fā)送到相應(yīng)的CWnd 類的OnMessage 成員函數(shù)。程序員可以重載OnMessage成員函數(shù)以對特定的消息進(jìn)行處理。通過CWnd類還可以創(chuàng)建窗口的子窗口,派生一個CWnd類的派生類??梢圆捎孟旅娴牟襟E創(chuàng)建子窗口:1) 調(diào)用類CWnd的構(gòu)造函數(shù)生成類CWnd的對象。2) 調(diào)用生成的類CWnd的對象的Create成員函數(shù)以創(chuàng)建一個子窗口,并把創(chuàng)建的子窗口和CWnd類的對象聯(lián)系在一起。其中,CWnd類的成員函數(shù)Create的函數(shù)原型如下所示:virtual BOOL Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);函數(shù)Create被定義成一個虛擬函數(shù),它的參數(shù)如表6-7所示。表6-7 函數(shù)Create的參數(shù)參數(shù)名含義lpszClassName用于創(chuàng)建窗口的類名lpszWindowName創(chuàng)建的窗口名dwStyle窗口的風(fēng)格屬性rect指定窗口區(qū)域pParentWnd指定窗口的父窗口nID子窗口的標(biāo)識符pContext創(chuàng)建的窗口的場境信息還有一部分可視對象類不是從CWnd派生來的,而代之直接從CObject派生而來。其中,CDC類封裝了Windows的設(shè)備描述表的功能。CDC成員函數(shù),如DrawText和LineTo等封裝了大部分GDI函數(shù),并提供了在窗口中繪圖的手段。CDC派生類如CPaintDC、CWindowDC和CClientDC等表示了更為普遍的CDC類的特例。例如,CPaintDC從它的構(gòu)造函數(shù)和析構(gòu)函數(shù)自動調(diào)用BeginPaint和EndPaint Windows API函數(shù),簡化對WM_PAINT消息的處理;其間CMakeFileDC類提供了面向?qū)ο蟮腉DI圖元文件的封裝。CGdiObject類作為對畫筆、畫刷和字體的封裝的基類,它提供了對這些繪圖基本工具的基本支持。其派生類如CPen、CBrush和CFont表示了這寫繪圖工具本身。在MFC中,指定一支GDI畫筆就是一個創(chuàng)建CPen類對象的過程。關(guān)于畫筆的操作都可以通過調(diào)用CPen類的成員函數(shù)來實現(xiàn)。一旦CDC(或由CDC派生的)類的SelectObject把創(chuàng)建的畫筆對象加入到當(dāng)前的設(shè)備描述表中,畫筆就可以繪畫了。由CGdiObject派生出的其他類包括表示位圖的CBitmap類;表示邏輯調(diào)色板的CPalette類,以及封裝屏幕上定義為矩形、多邊行和橢圓形組合的不規(guī)則區(qū)域的CRgn類。CMenu類也是屬于可視對象類的范圍,它提供一個面向?qū)ο蟮牟藛谓缑妗=?jīng)過CMenu類的封裝,在應(yīng)用程序中使用菜單變得更為容易。菜單的加載到菜單的修改到菜單的復(fù)選等,均可以通過封裝在類CMenu中的成員函數(shù)來實現(xiàn)。6.2.4 OLE類OLE1.0規(guī)范是微軟于1991年發(fā)布的,代表了對象連接和嵌入技術(shù)。OLE1.0是處理復(fù)合文檔的一種方法,復(fù)合文檔就是在一個文檔中同時保存多種不同類型的數(shù)據(jù)(如文本、圖象和聲音等),這些數(shù)據(jù)可以由不同的應(yīng)用程序用不同的格式產(chǎn)生。一般稱用于創(chuàng)建復(fù)合文檔的應(yīng)用程序為“容器”,而稱用于創(chuàng)建復(fù)合文檔數(shù)據(jù)的應(yīng)用程序為“服務(wù)器”。然后應(yīng)用程序可以是容器,也可以是服務(wù)器,或者兩者都是。微軟于1993年發(fā)布了OLE2.0規(guī)范,OLE2.0是基于對象服務(wù)的一整套體系結(jié)構(gòu),能夠擴(kuò)展、定制和增強(qiáng),它的理論基礎(chǔ)是COM(Componant Object Modal)。OLE2.0包括一系列服務(wù),包括剪貼板、拖放、嵌入、在位激活、鏈接、Moniker、OLE 自動化、OLE文檔、OLE控件、結(jié)構(gòu)化存儲和統(tǒng)一數(shù)據(jù)傳輸?shù)?。ActiveX是OLE的擴(kuò)展,它使OLE進(jìn)入Internet和Intranet。與OLE有關(guān)的ActiveX技術(shù)包括ActiveX文檔、ActiveX控件和Internet Moniker等。MFC中提供了對OLF技術(shù)體系的全方位的支持。它提供了OLE基類、可視編輯容器類、可視編輯服務(wù)器類、數(shù)據(jù)傳送類、OLE對話類和雜項類等六種類來封裝OLE技術(shù)?;惾鏑OleDocument和CDocItem封裝了復(fù)合文檔即其中的對象??梢暰庉嬋萜黝?,如COleClientItem及COleLinkingDOC提供用于OLE容器的基礎(chǔ)結(jié)構(gòu)去支持可視編輯。同時有些類,如COleServerDoc 和COleServerItem在服務(wù)器方起類似作用。數(shù)據(jù)傳送類,COleDropSource 、COleDropTarget、 COleDataSource 和COleDataObject封裝拖放操作及通過剪貼板進(jìn)行的數(shù)據(jù)傳送操作。OLE對話類,如COleInsertDialog顯示標(biāo)準(zhǔn)的OLE對話框。雜項類,如CRectTracker,它圍繞一個插入在復(fù)合文檔中的項建立邊框,這樣可使該項移動和調(diào)整大小。6.2.5數(shù)據(jù)庫類為了支持向帶有ODBC(開發(fā)數(shù)據(jù)庫互聯(lián) Open Database Connectivity)驅(qū)動程序的各種數(shù)據(jù)庫管理系統(tǒng)提供標(biāo)準(zhǔn)化界面ODBC標(biāo)準(zhǔn),MFC提供了CDatabase和CRecordset類。CDatabase表示和數(shù)據(jù)源的一種ODBC連接,CRecordset類表示那個數(shù)據(jù)源中的一組記錄。同時,這些類封裝了ODBC API,并允許用戶繼承自CRecordset類的成員函數(shù)把存儲在數(shù)據(jù)庫中的數(shù)據(jù)作為被查詢、更新和其他方式操作的對象來處理。由CFormView派生的CRecordView類進(jìn)一步通過連接記錄集對象到顯示當(dāng)前記錄的字段值的類似對話框的一個表單視圖來簡化操作。 MFC中提供的對話數(shù)據(jù)交換技術(shù)可以是表單視圖控件中顯示的數(shù)據(jù)和記錄集對象中的字段發(fā)生雙向的數(shù)據(jù)交換。MFC中還提供了對數(shù)據(jù)訪問對象的支持,所謂數(shù)據(jù)訪問對象是指微軟對基于Microsoft Jet數(shù)據(jù)庫訪問而提出的一種應(yīng)用程序接口,并在MFC中組織成類的形式提供給程序員。MFC中的CDaoWorkspace類封裝了DAO的工作區(qū)對象,每個工作區(qū)對象是一個事務(wù)管理器,指定所有在同一事務(wù)空間中打開的數(shù)據(jù)庫集并提供對數(shù)據(jù)庫引擎的訪問。類CDaoDatabase封裝了DAO的數(shù)據(jù)庫對象。數(shù)據(jù)庫對象表示與數(shù)據(jù)庫的連接。DAO中的表定義是通過CDaoTableDef類來進(jìn)行封裝的。表定義對象表示表的結(jié)構(gòu),用于檢查和操縱表結(jié)構(gòu)。查詢定義對象由類CDaoQueryDef進(jìn)行封裝。查詢定義對象表示用戶生成并運行的查詢。記錄集對象是由類CDaoRecordset進(jìn)行封裝的。DAO中的字段記錄數(shù)據(jù)交換是由CDaoFieldExchange類來管理的。MFC中還提供了對OLE DB技術(shù)標(biāo)準(zhǔn)的支持。OLE DB這一技術(shù)標(biāo)準(zhǔn)提出的目的是為了提供一種統(tǒng)一的數(shù)據(jù)訪問接口。OLE DB接口能夠訪問各種的數(shù)據(jù)庫管理系統(tǒng)以及一些非數(shù)據(jù)庫的信息源。OLE DB的具體實現(xiàn)是一組C+函數(shù)集,MFC在此基礎(chǔ)上進(jìn)行了進(jìn)一步的抽象,并把這些函數(shù)組織成類庫的形式提供給程序員。這一系列的類被稱為ActiveX數(shù)據(jù)對象類。6.2.6 通用類不是所有的類都設(shè)計成封裝Windows API的。MFC中包含了許多通用類用于各種各樣的任務(wù),如管理字符串變量和文件輸入輸出等。CString類封裝了對字符串的操作。并通過重載操作符的方式擴(kuò)展了對字符串的處理。例如通過“=”可以對字符串變量進(jìn)行賦值操作。CFile類封裝了對文件的操作,CFile類中提供了標(biāo)準(zhǔn)的用于文件輸入輸出的函數(shù),如Read、Write等。CFile對象通常通過CArchive對象被間接訪問。CExeception是一個抽象基類,供C的try/throw/catch異常處理機(jī)制使用。由CExeception派生的CFileExeception類描述了文件操作產(chǎn)生的異常。公有數(shù)據(jù)成員包含顯示引起異常的錯誤的確切特性的出錯代碼。經(jīng)常使用的其他異常類包括用于內(nèi)存不夠錯誤的CMemoryException類,用于檔案文件錯誤的CArchieveException類。用于OLE錯誤的COleException,以及用于裝入Windows資源錯誤的CResourceException。MFC從它自己的代碼中拋出各種類型的異常,這樣,應(yīng)用程序就可以利用異常捕獲程序塊監(jiān)測錯誤情況和據(jù)此作出反應(yīng)。MFC提供了全局函數(shù)來幫助應(yīng)用程序拋出異常。MFC聚合類,提供對數(shù)組和連接到表之類的公有數(shù)據(jù)結(jié)構(gòu)的類庫支持。數(shù)組類CByteArray
溫馨提示
- 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年中國當(dāng)歸行業(yè)發(fā)展趨勢預(yù)測及投資戰(zhàn)略咨詢報告
- 長方形罐行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 2025年高精度高速切紙機(jī)行業(yè)深度研究分析報告
- 會展運營合同范本
- 加盟合同范本格式
- 勞動合同范本 計時
- 包清工安全合同范本
- 化妝品代理項目合同范例
- 事業(yè)編 合同范例
- 2025年度數(shù)據(jù)中心撤場及信息安全保障協(xié)議
- 陜2018TJ 040建筑節(jié)能與結(jié)構(gòu)一體化 復(fù)合免拆保溫模板構(gòu)造圖集
- DZ/T 0430-2023 固體礦產(chǎn)資源儲量核實報告編寫規(guī)范(正式版)
- (高清版)WST 442-2024 臨床實驗室生物安全指南
- 歷史時間軸全
- 2019譯林版高中英語全七冊單詞總表
- 高速行業(yè)網(wǎng)絡(luò)安全與維護(hù)
- 2024年能源電力行業(yè)數(shù)字化轉(zhuǎn)型解決方案
- (2024年)房地產(chǎn)銷售人員心態(tài)培訓(xùn)
- 康復(fù)科院感年度工作計劃
- T-BJCC 1003-2024 首店、首發(fā)活動、首發(fā)中心界定標(biāo)準(zhǔn)
- 《海洋自然保護(hù)區(qū)》課件
評論
0/150
提交評論