華文網

VC|Windows應用程式開發特性和類嚮導

一個完整的Windows應用程式除了WinMain函數外,還包含用於處理使用者動作和視窗消息的視窗函數。這不同於一個C++的控制台應用程式,可以將整個套裝程式含在main函數中。事實上,它們的區別還遠不止這些,

不久還會發現一個Windows應用程式還常常具有這樣的一些特性:

消息驅動機制

圖形裝置介面(GDI)

基於資源的程式設計

動態連結程式庫

進程和執行緒

1 消息驅動機制

在Windows操作環境中,無論是系統產生的動作或是使用者運行應用程式產生的動作,都稱為事件(Events)產生的消息(Message)。例如,在Windows 桌面(傳統風格)上,按兩下應用程式的快捷圖示,系統就會執行該應用程式。在Windows的應用程式中,

也是通過接收消息、分發消息、處理消息來和使用者進行交互的。

這種消息驅動的機制是Windows程式設計的最大特點。需要注意的是,許多Windows消息都經過了嚴格的定義,並且適用于所有的應用程式。例如,當使用者按下滑鼠的左鍵時系統就會發送WM_LBUTTONDOWN消息,而當使用者敲了一個字元鍵時系統就會發送WM_CHAR消息,若使用者進行功能表選擇或工具按鈕按一下等操作時,系統又會相應地發送WM_COMMAND消息給相應的視窗等等。

2 圖形裝置介面(GDI)

在傳統的DOS環境中,想要在印表機上列印一幅圖形是一件非常複雜的事情,因為使用者必須根據印表機類型和指令規則向印表機輸送資料。而Windows則提供了一個抽象的介面,稱為圖形裝置介面(Graphical Device Interface,簡稱GDI),使得使用者直接利用系統的GDI函數就能方便實現輸入或輸出,而不必關心與系統相連的外部設備的類型。

3 基於資源的程式設計

Windows應用程式常常包含眾多圖形元素,

例如游標、功能表、工具列、點陣圖、對話方塊等,在Windows環境下,每一個這樣的元素都作為一種可以裝入應用程式的資源來存放。這些資源就像C++程式中的常量一樣,可以被編輯、修改,也可以被其他應用程式所共用。Visual C++ 6.0中就提供這樣的編輯器,可“所見即所得”地對這些不同類型的資源進行設計、編輯等。

4 動態連結程式庫

動態連結程式庫提供了一些特定結構的函數,

能被應用程式在運行過程中裝入和連接,且多個程式可以共用同一個動態連結程式庫,這樣就可以大大節省記憶體和磁碟空間。從程式設計角度來說,動態連結程式庫可以提高程式模組的靈活性,因為它本身是可以單獨設計、編譯和調試的。

Windows提供了應用程式可利用的豐富的函式呼叫,大多數用於實現其使用者介面和在顯示器上顯示的文本和圖形,

都是通過動態連結程式庫來實現的。這些動態連結程式庫是一些具有.DLL副檔名或者有時是.EXE副檔名的文件。

在Windows作業系統中,最主要的DLL有KERNEL32.DLL、GDI32.DLL和USER32.DLL三個模組。其中,KERNEL32用來處理記憶體低層功能、任務和資源管理等Windows核心服務; GDI32用來提供圖形裝置介面,管理使用者介面和圖形繪製,包括Windows中繼檔、點陣圖、設備描述表和字體等;而USER32負責視窗的管理,包括消息、功能表、游標、計時器以及其它與控制視窗顯示相關的一些功能。

5 進程和執行緒

在32位元Windows多工作業系統中,採用了進程和執行緒的管理模式。進程是裝入記憶體中正在執行的應用程式。進程包括私有的虛擬位址空間、代碼、資料及其它作業系統資源,如檔、管道以及對該進程可見的同步物件等。進程包括了一個或多個在進程上下文內運行的執行緒。執行緒是作業系統分配CPU時間的基本實體。執行緒可以執行應用程式碼的任何部分,包括當前正在被其它執行緒執行的那些部分。同一進程的所有執行緒共用同樣的虛擬位址空間、全域變數和作業系統資源。在一個應用程式中,可以包括一個或多個進程,每個進程由一個或多個執行緒構成。

VC中的ClassWizard對話方塊包含了5個標籤頁面,它們各自含義如下:

5.1 Message Maps(消息映射):用來添加、刪除和程式設計處理消息的成員函數。

5.2 Member Variables(成員變數):添加或刪除與控制項相關聯的成員變數(或稱資料成員),以便與控制項進行資料交換。這些控制項所在的類一般是從CDialog、CPropertyPage、CRecordView或CDaoRecordView中派生的類。

5.3 Automation(自動化):為支援Automation的類(如ActiveX控制項類)添加屬性和方法。

5.4 ActiveX Events(ActiveX事件):為ActiveX控制項類添加觸發事件的支持。

5.5 Class Info(類信息):有關專案中類的其他資訊。

一般來說,MFC ClassWizard對話方塊最前兩項是用戶最關心的,也是最經常使用的,因為幾乎所有的代碼編寫都要利用這兩個標籤項。由於Member Variables功能以後還會詳細討論,因此這裡僅討論Message Maps(消息映射)與類的添加和刪除方法。

5 進程和執行緒

在32位元Windows多工作業系統中,採用了進程和執行緒的管理模式。進程是裝入記憶體中正在執行的應用程式。進程包括私有的虛擬位址空間、代碼、資料及其它作業系統資源,如檔、管道以及對該進程可見的同步物件等。進程包括了一個或多個在進程上下文內運行的執行緒。執行緒是作業系統分配CPU時間的基本實體。執行緒可以執行應用程式碼的任何部分,包括當前正在被其它執行緒執行的那些部分。同一進程的所有執行緒共用同樣的虛擬位址空間、全域變數和作業系統資源。在一個應用程式中,可以包括一個或多個進程,每個進程由一個或多個執行緒構成。

VC中的ClassWizard對話方塊包含了5個標籤頁面,它們各自含義如下:

5.1 Message Maps(消息映射):用來添加、刪除和程式設計處理消息的成員函數。

5.2 Member Variables(成員變數):添加或刪除與控制項相關聯的成員變數(或稱資料成員),以便與控制項進行資料交換。這些控制項所在的類一般是從CDialog、CPropertyPage、CRecordView或CDaoRecordView中派生的類。

5.3 Automation(自動化):為支援Automation的類(如ActiveX控制項類)添加屬性和方法。

5.4 ActiveX Events(ActiveX事件):為ActiveX控制項類添加觸發事件的支持。

5.5 Class Info(類信息):有關專案中類的其他資訊。

一般來說,MFC ClassWizard對話方塊最前兩項是用戶最關心的,也是最經常使用的,因為幾乎所有的代碼編寫都要利用這兩個標籤項。由於Member Variables功能以後還會詳細討論,因此這裡僅討論Message Maps(消息映射)與類的添加和刪除方法。