您的位置:首頁>正文

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(消息映射)與類的添加和刪除方法。

這些控制項所在的類一般是從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(消息映射)與類的添加和刪除方法。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示