天天看點

《Windows 程式設計(第3版)》——6.6 使用Microsoft基礎類庫

本節書摘來自異步社群《windows 程式設計(第3版)》一書中的第6章,第6.6節,作者:王豔平 , 張铮著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視

到現在,相信你不僅知道架構程式的使用方法,還非常清楚它的内部實作。下面将直接介紹如何在微軟的基礎類庫mfc中建立視窗應用程式。

mfc使用c++類對windows api進行封裝,較大程度地屏蔽了windows程式設計的複雜性,使windows應用程式的設計變得簡單。這是大多數軟體開發者使用的一個類庫。

本書以前使用架構程式編寫的程式都可以在mfc下編譯通過。以上一節的06meminfo程式為例,看看如何在mfc下編譯這些程式。具體步驟如下。

(1)包含頭檔案。打開06meminfo工程,将meminfo.h檔案中包含頭檔案的代碼改為:

<code>#include "afxwin.h"    // 原先此處的代碼為“#include "../common/_afxwin.h"”</code>

也就是把包含我們類庫的檔案的代碼全改為包含mfc中檔案的代碼。檔案名稱也是對應的,隻要将字首“_”去掉即可。

(2)清除工程中原類庫檔案。将從common檔案夾下添加到工程中的檔案全部删除(從vc工程中删除)。這時工程中隻有meminfo.h和meminfo.cpp兩個檔案。現在通過菜單指令“build/rebuild all”全部重新編譯連接配接程式。

(3)修改工程設定。如果出現連接配接錯誤的話,還要對工程進行的設定。單擊菜單指令“project/settings...”,打開設定工程屬性的對話框,切換到general頁籤,在microsoft foundation classes視窗下選中use mfc in a static library選項,如圖6.6所示。單擊ok按鈕即可。

《Windows 程式設計(第3版)》——6.6 使用Microsoft基礎類庫

第3步指定了如何連結到mfc。microsoft foundation classes視窗下共有3個選項。

not using mfc 不使用mfc。

use mfc in a static library 靜态連結到mfc。這樣最終生成的程式不依賴mfc運作。 期庫也能夠運作。一般在釋出程式時,要設定這個選項。

use mfc in a shared dll 動态連結到mfc。這樣最終生産的程式要依賴mfc運作 期庫才能夠運作。

在工程中使用mfc是非常簡單的,隻要按照第3步的方法修改工程設定,然後包含上定義要使用的類的檔案即可。以前所設計的類的命名方式和mfc的命名方式是相同的,它們所提供的接口也完全相同。是以,本書所有使用架構程式的例子都可以在mfc下編譯通過。

mfc把大多數api函數都封裝成了類,以友善使用者的使用。比如,它把操作裝置環境的函數都封裝到了cdc類中,此類一個公開成員變量m_hdc,儲存了與cdc對象關聯的裝置環境的句柄。為了友善響應wm_paint消息,操作視窗客戶區,操作整個視窗,mfc又從cdc類派生了cpaintdc、cclientdc 和cwindowdc類。下面是cpaintdc類的簡化版本。

程式在執行個體化cpaintdc對象時調用了beginpaint函數,當在銷毀這個對象時又調用了endpaint函數。它以後就可以這樣響應wm_paint消息了。

另外兩個類的實作過程與cpaintdc類相似,cclientdc的構造函數取得視窗客戶區的裝置環境句柄,cwindowdc類取得整個視窗的裝置環境句柄。

對mfc的讨論絕不僅僅是這些,但核心的功能已經完全模拟實作了,剩下的都是一些固定的使用格式。本書附錄1列出了整個mfc 6.0的層次結構。下一小節将使用mfc建立一個視窗資訊檢視程式,以使讀者更深切地感受mfc的工作方式。