《深入淺出mfc》學習筆記

《深入淺出MFC》是本人一直想深讀的一本書,在剛開始學VC時雖然也曾化一些時間來看,但總覺得收穫不大,經過一段時間的程序設計實踐,現在回過頭來看這些東西,覺得有了不少收穫,或許這正是我喜歡這本書的原因所在,越讀越有味道,越讀越覺得書中的東西能夠彌補自己的缺憾,這樣的纔算是真正的得到了閱讀的樂趣吧。下面摘抄一些原文,並總結了一些學習心得,權當作一點小小的學習收穫吧,也希望在寫作和閱讀的過程中獲得更多的理解和體會。

文章結構如下,先引用一部分原文,然後是自己的學習心得,最後翻譯了原文中引用的一段說明文件,對於要反覆讀取的重要書籍,我一貫採取這樣的讀法,先讀框架結構,在細細研讀,從中找出關鍵詞句,寫出自己的心得體會,然後反覆用心體會,知道徹底理解爲止,只有這樣,才能不辜負一本優秀的技術圖書作者的良苦用心和自己所耗費的時間和精力吧。

原文:

凝聚性強、組織化強的類庫就是Application Framework。一組合作無間的對象,彼此藉信息的流動而溝通,並且互相調用對方的函數以求完成任務,這就是Application Framework

對於數據結構的安排,數據的處理,數據的顯示,Application Framework所能提供的,無一不是單單一個空殼而已——在C++語言來講就是個虛函數。軟件開發人員必須想辦法改造(override)這些虛函數,才能符合個人所需。

很明顯,Application Framework是一組超級的類庫,能夠被稱爲Framework者必須是其中的類性質緊密咬合,互相呼應。

1989年微軟公司成立Application Framework技術團隊,名爲AFX小組,用以開發C++面向對象工具給Windows應用程序開發人員使用。AFX的“X”其實沒有什麼意義,只是爲了湊成一個響亮好唸的名字。

學習心得:

Application Framework顧名思義是“應用程序框架”,說得抽象一點是一個龐大的框架結構,該結構爲程序開發提供了一個基本的實現平臺,使我們能夠在一羣優秀工程師的工作基礎上更加高效的工作。而具體一點說,實際上它是一套完整的類庫,其中封裝了一些實現各種功能的函數,用戶只要瞭解這些類庫的接口而不必瞭解其中複雜的實現過程就可以設計出實用的程序。最常見的三套C++ Application Frameworks包括MicrosoftMFCBorlandOWL,以及IBM VisualAgeOpen Class Library。所以說,如果把Application Frameworks當作一種以面向對象理論爲基礎的框架結構思想的話,上述三種類庫則是其具體的實現。

原文:

MFC幫助我們把這些浩繁的APIS,利用面向對象的原理,邏輯地組織起來,使它們具備抽象化、封裝化、繼承性、多態性、模塊化的性質。

爲了讓MFC儘可能的小、儘可能的快,AFX小組不得不捨棄高度的抽象,而引進他們自己發明的機制,嘗試在面向對象領域中解決Windows消息的處理問題。即Message MappingMessage routing機制。他們設計了一些令人拍案叫絕的宏,而這些宏背後隱藏着巨大的機制。

理解這些宏(以及他們背後所代表的機制)的意義,以及隱藏在MFC類之中的那些足以暴露原型機密的“麻煩事兒”,正是我認爲掌握MFC這套Application Frameworks的重要手段。

MFC類主要可分爲下列數大羣組:

General Purpose classes:提供字符串類、數據處理類、異常處理類、文件類等等。

Windows API classes:用來封裝Windows API,例如窗口類、對話框類、DC類等等。

Application framework classes:組成應用程序骨幹者,即此組類,包括Document/View、消息泵、消息映射、消息傳遞、動態創建、文件讀寫等等。

High level abstrations:包括工具欄、狀態欄、拆分窗口、滾動窗口等等。

Operation system extensions:包OLEODBCDAOMAPIWinSockISAPI等等。

學習心得:

以前只知道使用,現在對MFC的概念纔算有進一步瞭解,在程序設計過程中,應首先考慮自己實現的功能屬於那一個MFC類的羣組,然後再在相應的羣組中選擇適合自己的類進行開發,同時根據自己的需求進行擴展。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

以下是對書中例子程序Scribblereadme.txt文件的翻譯,個人以爲雖然該文件是MFC框架中生成的最常見的文件,但從中卻可以瞭解一些MFC所生成的各種文件的基本用途。翻譯的過程也是一個很好的學習過程。

========================================================================

       MICROSOFT FOUNDATION CLASS LIBRARY : Scribble

========================================================================

AppWizard爲您創建了該Scribble程序。該程序不僅演示了MFC的基本使用方法,而且是您書寫應用程序的起點。

該文件對實現Scribble程序所用到的程序進行了總結說明。

Scribble.h

    這是應用程序的頭文件。包括其他特定的頭文件(包括Resource.h)並聲明瞭CscribbleApp應用程序類。

 

Scribble.cpp

    這是包含應用類CscribbleApp的主應用程序源文件。

 

Scribble.rc

    該文件給出了程序使用的所有Microsoft Windows資源列表。包括存放在RES子路徑下的圖標,圖片和光標。該文件可直接在Microsoft Developer Studio中編輯。

 

res/Scribble.ico

    圖標文件,用作應用程序圖標,該圖標包含在主資源文件Scribble.rc 中。

 

res/Scribble.rc2

該文件包含的資源無法用Microsoft Developer Studio編輯。故應把所有不可編輯的資源放入此文件。

 

Scribble.clw

    該文件包含了ClassWizard要用到的信息,用於編輯存在的類和添加新類。ClassWizard也使用該文件存儲用於創建和編輯消息映射、對話框數據映射以及創建成員函數的信息。

 

/////////////////////////////////////////////////////////////////////////////

對於主框架窗口:

MainFrm.h, MainFrm.cpp

    這些文件包含從CMDIFrameWnd派生的框架類CmainFrame,用於控制所有的MDI框架特性。

 

res/Toolbar.bmp

    該圖片用於創建工具條要用到的圖片。CMainFrame 類創建了初始工具條和狀態條。編輯MainFrm.cpp 與此工具條圖片相關的數組可以添加更多的工具條按鈕。

 

/////////////////////////////////////////////////////////////////////////////

 

AppWizard創建一個文檔類型和一個文檔視圖

 

ScribbleDoc.h, ScribbleDoc.cpp – 文檔

    這些文件包含CscribbleDoc類。可以通過編輯這些文件添加特殊的文檔數據並實現文件的保存和裝載(通過CScribbleDoc::Serialize).

 

ScribbleView.h, ScribbleView.cpp – 文檔視圖

    這些文件包含CscribbleView類。CscribbleView對象用於查看CscribbleDoc對象。

 

res/ScribbleDoc.ico

    圖標文件,用作MDI子窗口圖標。主資源文件Scribble.rc包含該圖標。

 

/////////////////////////////////////////////////////////////////////////////

其他標準文件:

 

StdAfx.h, StdAfx.cpp

    這些文件用於創建預編譯頭文件(PCH文件)以及一個預編譯類型的文件StdAfx.obj

Resource.h

標準頭文件,創建新的資源IdsMicrosoft Developer Studio讀取和更新該文件。

 

通過上述內容可以獲得如下信息:

那個是應用程序的主文件,那些文件用於實現文檔/視圖結構,那些文件用於處理文檔數據,那些是資源文件,分別用在什麼地方,各個頭文件的功能是什麼,看了之後,是不是有些收穫呢。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章