MFC定義數據庫
MFC全稱Microsoft Foundation Classes,也就是微軟基礎類庫。它是VC++的核心,是C++與Windows API的結合,很完全的用C++封裝了Windows SDK(Software Development Kit,軟件開發工具包)中的結構和功能,還提供了一個應用程序框架,此應用程序框架爲軟件開發者完成了一些例行化的工做,好比各類窗口、工具欄、菜單的生成和管理等,不須要開發者再去解決那些很複雜很乏味的難題,好比每一個窗口都要使用Windows API註冊、生成與管理。這樣就大大減小了軟件開發者的工做量,提升了開發效率。編程
利用vs,vc6.0快速生成單文檔應用程序框架瀏覽器
1.點菜單欄File->New->Project,彈出New Project對話框,咱們能夠選擇工程類型。框架
若是安裝完VS2010之後第一啓動時已經設置爲VC++,則Installed Templates->Visual C++項會默認展開,而若是沒有設置VC++,則能夠展開到Installed Templates->Other Languages->Visual C++項。由於咱們要生成的是MFC程序,因此在「Visual C++」下選擇「MFC」,對話框中間區域會出現三個選項:MFC ActiveX Control、MFC Application和MFC DLL。MFC ActiveX Control用來生成MFC ActiveX控件程序。MFC Application用來生成MFC應用程序。MFC DLL用來生成MFC動態連接庫程序。固然咱們要選擇MFC Application。函數
在對話框下部有Name、Location和Solution name三個設置項。意義以下:Name--工程名,Location--解決方案路徑,Solution name--解決方案名稱。這裏Name咱們設爲「HelloWorld」,Location設置爲「桌面」的路徑,Solution name默認和Name同樣,固然能夠修改成其餘名字,這裏咱們不做修改,也使用「HelloWorld」。點「OK」按鈕。工具
2.這時會彈出「MFC Application Wizard」對話框,上部寫有「Welcome to the MFC Application Wizard」,下面顯示了當前工程的默認設置。第一條「Tabbed multiple document interface (MDI)」是說此工程是多文檔應用程序。若是這時直接點下面的「Finish」按鈕,可生成具備上面列出設置的多文檔程序。但咱們此例是要創建單文檔應用程序,因此點「Next」按鈕再繼續設置吧。開發工具
3.接下來彈出的對話框上部寫有「Application Type」,固然是讓選擇應用程序類型,咱們看到有四種類型:Single document(單文檔)、Multiple documents(多文檔)、Dialog based(基於對話框)和Multiple top-level documents。咱們選擇Single document類型,以生成一個單文檔應用程序框架。單文檔應用程序運行時是一個單窗口界面。調試
此對話框的「Resource language」還提供語言的選擇,這裏默認選擇英語。「Project style」可選擇工程風格,咱們選擇默認的「Visual Studio」風格。「Use of MFC」有兩個選項:Use MFC in a shared DLL(動態連接庫方式使用MFC)和Use MFC in a static library(靜態庫方式使用MFC)。選擇Use MFC in a shared DLL時MFC的類會以動態連接庫的方式訪問,因此咱們的應用程序自己就會小些,可是發佈應用程序時必須同時添加必要的動態連接庫,以便在沒有安裝VS2010的機子上可以正常運行程序。選擇Use MFC in a static library時MFC的類會編譯到可執行文件中,因此應用程序的可執行文件要比上種方式大,但能夠單獨發佈,不需另加包含MFC類的庫。這裏咱們使用默認的Use MFC in a shared DLL。點「Next」按鈕。對象
4.此時彈出上部寫有「Compound Document Support」的對話框,能夠經過它嚮應用程序加入OLE支持,指定OLE選項的複合文檔類型。本例不須要OLE特性,使用默認值「None」。點「Next」按鈕。blog
5.彈出的新對話框上部寫有「Document Template Properties」。「File extension」能夠設置程序能處理的文件的擴展名。對話框其餘選項還能夠更改程序窗口的標題。咱們都使用默認設置,點「Next」按鈕。
6.此時彈出的對話框主題是「Database Support」。用於設置數據庫選項。此嚮導能夠生成數據庫應用程序須要的代碼。它有四個選項:
None:忽略全部的數據庫支持;
Header files only:只包含定義了數據庫類的頭文件,但不生成對應特定表的數據庫類或視圖類;
Database view without file support:建立對應指定表的一個數據庫類和一個視圖類,不附加標準文件支持;
Database view with file support:建立對應指定表的一個數據庫類和一個視圖類,並附加標準文件支持。
本例選擇默認值「None」,不使用數據庫特性。點「Next」按鈕。
7.這時彈出的對話框是關於「User Interface Features」,即用戶界面特性。咱們能夠設置有無最大化按鈕、最小化按鈕、系統菜單和初始狀態欄等。還能夠選擇使用菜單欄和工具欄生成簡單的應用程序仍是使用ribbon。這裏咱們都選擇默認設置。點「Next」進入下一步。
8.此時彈出「高級特性」對話框。能夠設置的高級特性包括有無打印和打印預覽等。在「Number of files on recent file list」項能夠設置在程序界面的文件菜單下面最近打開文件的個數。咱們仍使用默認值。點「Next」按鈕。
9.彈出「生成類」對話框。在對話框上部的「生成類」列表框內,列出了將要生成的4 個類:一個視圖類(CHelloWorldView)、一個應用類(CHelloWorldApp)、一個文檔類(CHelloWorldDoc)和一個主框架窗口類(CMainFrame)。在對話框下面的幾個編輯框中,能夠修改默認的類名、類的頭文件名和源文件名。對於視圖類,還能夠修改其基類名稱,默認的基類是CView,還有其餘幾個基類能夠選擇。這裏咱們仍是使用默認設置。點「Finish」按鈕。
應用程序嚮導最後爲咱們生成了應用程序框架,並在Solution Explorer中自動打開了解決方案(見上面第一張圖)。
項目文件組成
1.解決方案相關文件
解決方案相關文件包括解決方案文件夾下的.sdf文件、.sln文件、.suo文件和ipch文件夾。
.sdf文件和ipch目錄通常佔用空間比較大,幾十兆甚至上百兆,與智能提示、錯誤提示、代碼恢復和團隊本地倉庫等相關。若是你以爲不須要則能夠設置不生成它們,方法是點擊菜單欄Tools->Options,彈出Options對話框,選擇左側面板中Text Editor->C/C++->Advanced,右側列表中第一項Disable Database由False改成True就能夠了,最後關閉VS2010再刪除.sdf文件和ipch目錄之後就不會再產生了。但關閉此選項之後也會有不少不便,例如寫程序時的智能提示沒有了。
.sln文件和.suo文件爲MFC自動生成的解決方案文件,它包含當前解決方案中的工程信息,存儲解決方案的設置。
2.工程相關文件
工程相關文件包括工程文件夾下的.vcxproj文件和.vcxproj.filters文件。
.vcxproj文件是MFC生成的工程文件,它包含當前工程的設置和工程所包含的文件等信息。.vcxproj.filters文件存放工程的虛擬目錄信息,也就是在解決方案瀏覽器中的目錄結構信息。
3.應用程序頭文件和源文件
應用程序嚮導會根據應用程序的類型(單文檔、多文檔或基於對話框的程序)自動生成一些頭文件和源文件,這些文件是工程的主體部分,用於實現主框架、文檔、視圖等。雞啄米下面分別簡單介紹下各個文件:
HelloWorld.h:應用程序的主頭文件。主要包含由CWinAppEx類派生的CHelloWorldApp類的聲明,以及CHelloWorldApp類的全局對象theApp的聲明。
HelloWorld.cpp:應用程序的主源文件。主要包含CHelloWorldApp類的實現,CHelloWorldApp類的全局對象theApp的定義等。
MainFrm.h和MainFrm.cpp:經過這兩個文件從CFrameWndEx類派生出CMainFrame類,用於建立主框架、菜單欄、工具欄和狀態欄等。
HelloWorldDoc.h和HelloWorldDoc.cpp:這兩個文件從CDocument類派生出文檔類CHelloWorldDoc,包含一些用來初始化文檔、串行化(保存和裝入)文檔和調試的成員函數。
HelloWorldView.h和HelloWorldView.cpp:它們從CView類派生出名爲CHelloWorldView的視圖類,用來顯示和打印文檔數據,包含了一些繪圖和用於調試的成員函數。
ClassView.h和ClassView.cpp:由CDockablePane類派生出CClassView類,用於實現應用程序界面左側面板上的Class View。
FileView.h和FileView.cpp:由CDockablePane類派生出CFileView類,用於實現應用程序界面左側面板上的File View。
OutputWnd.h和OutputWnd.cpp:由CDockablePane類派生出COutputWnd類,用於實現應用程序界面下側面板Output。
PropertiesWnd.h和PropertiesWnd.cpp:由CDockablePane類派生出CPropertiesWnd類,用於實現應用程序界面右側面板Properties。
ViewTree.h和ViewTree.cpp:由CTreeCtrl類派生出CViewTree類,用於實現出如今ClassView和FileView等中的樹視圖。
4.資源文件
通常咱們使用MFC生成窗口程序都會有對話框、圖標、菜單等資源,應用程序嚮導會生成資源相關文件:res目錄、HelloWorld.rc文件和Resource.h文件。
res目錄:工程文件夾下的res目錄中含有應用程序默認圖標、工具欄使用圖標等圖標文件。
HelloWorld.rc:包含默認菜單定義、字符串表和加速鍵表,指定了默認的About對話框和應用程序默認圖標文件等。
Resource.h:含有各類資源的ID定義。
5.預編譯頭文件
幾乎全部的MFC程序的文件都要包含afxwin.h等文件,若是每次都編譯一次則會大大減慢編譯速度。因此把經常使用的MFC頭文件都放到了stdafx.h文件中,而後由stdafx.cpp包含stdafx.h文件,編譯器對stdafx.cpp只編譯一次,並生成編譯以後的預編譯頭HelloWorld.pch,大大提升了編譯效率。
6.編譯連接生成文件
若是是Debug方式編譯,則會在解決方案文件夾和工程文件夾下都生成Debug子文件夾,而若是是Release方式編譯則生成Release子文件夾。
工程文件夾下的Debug或Release子文件夾中包含了編譯連接時產生的中間文件,解決方案文件夾下的Debug或Release子文件夾中主要包含有應用程序的可執行文件。
MFC程序運行流程
MFC應用程序的運行流程先進行一些初始化過程,再註冊並建立窗口,而後顯示、更新窗口,最後進入消息循環,消息都由窗口過程函數處理。自動生成的MFC框架中比較重要的類包括如下幾個:CHelloWorldApp、CMainFrame、CHelloWorldDoc和CHelloWorldView,至於其餘的類好比CClassView、CFileView等都是在框架窗口(CMainFrame)上建立的面板等,不是必要的。CHelloWorldApp類處理消息,將收到的消息分發給相應的對象。CMainFrame是視圖CHelloWorldView的父窗口,視圖CHelloWorldView就顯示在CMainFrame的客戶區中。視圖類CHelloWorldView用來顯示文檔類CHelloWorldDoc中的數據,並根據對視圖類的操做修改文檔類的數據。一個視圖類只能跟一個文檔類相聯繫,而一個文檔類能夠跟多個視圖類相聯繫。關於視圖類和文檔類的關係後面會詳細講解。
MFC的消息響應機制
窗口消息通常由三個部分組成:1.一個無符號整數,是消息值;(2)消息附帶的WPARAM類型的參數;(3)消息附帶的LPARAM類型的參數。其實咱們通常所說的消息是狹義上的消息值,也就是一個無符號整數,常常被定義爲宏。
MFC使用一種消息映射機制來處理消息,在應用程序框架中的表現就是一個消息與消息處理函數一一對應的消息映射表,以及消息處理函數的聲明和實現等代碼。當窗口接收到消息時,會到消息映射表中查找該消息對應的消息處理函數,而後由消息處理函數進行相應的處理。