第四課——MFC應用程序框架

1、MFC應用程序類型編程

上篇文章的彩蛋:可經過使用MFC應用程序嚮導(MFC AppWizard)的功能來建立所須要的應用程序,這意味着不須要輸入任何代碼。MFC除了應用程序嚮導,還對應用程序項目有着獨特的管理方式。框架

1. MFC AppWizard函數

  做用:能爲用戶生成一些經常使用的標準程序結構和編程風格,它們被稱爲應用程序框架結構。工具

  提供的應用程序框架類型:包括MFC AppWizard(dll)、MFC AppWizard(exe)、Win32 Application等,這些類型基本上能知足各個層次用戶的不一樣須要,但通常的用戶更關心的是MFC AppWizard(exe)應用程序框架,由於它包含用戶最經常使用的三種應用程序類型:單文檔、多文檔和基於對話框的應用程序。優化

2. 單文檔應用程序、多文檔應用程序、基於對話框的應用程序spa

  基於對話框的應用程序:沒有菜單、工具欄及狀態欄,也不能處理文檔翻譯

 

下面的篇幅都默認已經建立了一個單文檔應用程序Ex_SDI調試

2、項目文件和項目配置項目管理

1. 工程/項目資源

  應用程序包含了除源程序外的許多信息,所以在Visual C++中常將它們稱爲「項目」或「工程」。

2. 工做文件夾

  Visual C++是用文件夾來管理一個應用程序項目的,這個文件夾稱爲「工做文件夾」,且文件夾名就是項目名。如Ex_SDI就是一個工做文件夾名。

  在工做文件夾下包含源程序代碼文件(.cpp、.h)、項目文件(.dsp)以及項目工做區文件(.dsw)等。

3. 探索工做文件夾

  以單文檔應用程序項目Ex_SDI爲例,該文件夾內除了有上述的文件外,還有相應的Debug或Release、Res等子文件夾。

  具體的圖示可參考p38的圖1.22,也可參考本身應用程序項目的文件夾。

4. Win32 Debug版本的運行程序

  用Visual C++ 6.0應用程序嚮導建立項目時,系統會自動爲項目建立Win32 Debug的運行程序,並使用相應的默認配置。

  它與Win32 Release版本的區別在於:Debug版本的運行程序有相應的調試信息碼,以便於程序的調試,而Release版本的運行程序沒有,但Release版本的運行程序通過代碼的優化,其程序的運行速度加快。

5. 讓應用程序可交付

選擇「組建」→「移除工程配置」菜單命令,在彈出的對話框中,選擇「Ex_SDI-Win32 Release」,而後單擊「肯定」按鈕。從新編連後,可將默認的Win32 Debug版本修改爲Win32 Release版本。這樣,在Release文件夾中的exe文件就是交付用戶的可執行文件

 

3、項目管理和類結構

1. 項目工做區

  做用:①有效地管理項目中的那些文件;②維護各源文件之間的依賴關係。

  內容:包含三個選項卡(ClassView類頁面、ResourceView資源頁面、FileView文件頁面)

2. 應用程序的MFC類結構

  咱們使用MFC AppWizard建立一個默認的Windows單文檔應用程序,並命名爲「Ex_SDI」。

  將項目工做區窗口切換到ClassView選項卡,能夠看到MFC爲單文檔應用程序項目Ex_SDI自動建立了類CAboutDlg、CEx_SDIApp、CEx_SDIDoc、CEx_SDIView和CMainFrame

上面這些類之間的說明以下:

  • CAboutDlg:對話框類,從CDialog類派生的,是每個應用程序框架都有的用來顯示本程序的有關信息
  • CEx_SDIApp:應用程序類,從CWinApp類派生的,是每個應用程序框架都有的負責應用程序的建立、運行和終止
  • CEx_SDIDoc:應用程序文檔類,從CDocument類派生的,負責應用程序文檔數據管理
  • CEx_SDIView:應用程序視圖類,既可從基類CView派生,也可從CView派生類(如CListView、CTreeView等)派生,負責數據的顯示、繪製和其餘用戶交互
  • CMainFrame:主框架窗口類負責主框架窗口的顯示和管理,包括工具欄和狀態欄等界面元素的初始化。對於單文檔應用程序,主框架窗口類是從CFrameWnd派生的。

 

4、OnDraw和消息添加

1. OnDraw函數

  在應用程序框架中,視圖類用來封裝和管理框架窗口的子窗口,當子窗口無效時,就會自動調用用戶視圖類的OnDraw函數。

  翻譯:子窗口無效→調用視圖類的OnDraw函數

  • OnDraw函數是對WM_PAINT消息的一種映射。故若想在客戶區繪製「Hello MFC!」時,其繪製代碼就應在OnDraw函數中添加(將項目工做區切換到ClassView選項卡,展開CEx_SDIView結點,雙擊OnDraw成員函數結點,在定位到的代碼區添加相應的代碼)。

2. 在視圖類中添加單擊鼠標的消息處理(映射)

  • 彈出MFC ClassWizard對話框→Message Maps(消息映射)選項卡→類名CEx_SDIView→在Objects IDs列表框中選定CEx_SDIView→雙擊Messages列表中的(要映射的)WM_LBUTTOMDOWN消息→在CEx_SDIView類中添加該消息的映射函數OnLButtonDown→雙擊消息函數(即OnLButtonDown)會定位到OnLButtonDown函數實現的源代碼處→添加相應的代碼
  • 上面的流程便完成了一個消息的添加和映射過程。
  • 讀後感:OnLButtonDown函數是WM_LBUTTOMDOWN消息映射,故當觸發「WM_LBUTTOMDOWN消息」時,程序會執行OnLButtonDown函數內的代碼。

  說明:上述消息的映射遵循前述的MFC消息映射機制,且在代碼中出現了//{{AFX_MSG(…)和//}}AFX_MSG以及//{{AFX_MSG_MAP(…)和//}}AFX_MSG_MAP等特殊標記,它們表示之間的內容由MFC ClassWizard自動管理。

 

補充:

MFC AppWizard:能爲用戶生成一些經常使用的標準程序結構和編程風格,它們被稱爲應用程序框架結構。

CEx_SDIView類:應用程序視圖類,負責數據的顯示、繪製和其餘用戶交互。

消息的映射:當觸發「WM_LBUTTOMDOWN消息」時,程序會執行OnLButtonDown函數內的代碼

相關文章
相關標籤/搜索