Windows API 程式的組織結構

2021-04-13 01:07:48 字數 1987 閱讀 5845

在介紹windows 程式的基本構架之前我們必需先了什麼是訊息。

在windows 多工環境下同時會有許多程式交織著進行這樣複雜的工作是如何管理的呢? windows 憑藉的就是「訊息傳送(messagepassing)」這個法寶!在windows 下所有外部輸入如按鍵、滑鼠、按鈕、移動計時等動作都是由系統先攔截轉換成訊息(message)之後再傳給各個程式,

windows 攔截輸入的目的之一是為了將不同外設輸入的資料轉換成一致的格式以方便程式處理這個一致的格式就是訊息(message)。

訊息是乙個結構它的組成如下:

typedef struct tagmsgmsg;

我們可以看到訊息結構包含了按鍵滑鼠時間等不同輸入裝置的資料,其中很重要的是第一項hwnd,這是訊息所欲送到的視窗的控制代碼(handle)。也就是說「訊息傳送的最終目的地是視窗而不是程式」 這一點很重要請各位記住。

因為訊息不會直接送給程式必須由程式主動從佇列中讀取,所以winmain()中通常會以乙個迴圈來讀取資訊:

while (getmessage( msg null 0,0))讀取訊息的迴圈

此迴圈用getmessage()函式往該程式的message queue 讀取訊息並存入msg 結構變數,然後再由迴圈內部來處理訊息。

getmessage():多工的基礎

當getmessage()從訊息佇列讀訊息時,則表示目前沒有工作給該程式做。此時getmessage()會自動將程式的控制權交給windows,以便windows 將控制權轉移給下乙個程式,這正是wind ows 多工的基礎。所以windows 程式中一定要用getmessage()來取訊息多工才能進行。

當我們操作視窗時(如按鈕) 視窗必須對該操作有所反應。在windows 下每個視窗背後都有乙個視窗函式負責視窗對操作(輸入)的反應也就是負責視窗的行為。因為視窗的「輸入—反應」動作是通過訊息來傳送的所以視窗函式的工作就是按所收到的訊息種類來決定反應的動作,因此視窗函式有時也稱為「訊息處理函式」,因為視窗函式對訊息反應之不同每個視窗才有不同的行為。

典型的視窗函式的格式為:

switch (message)

return (null);

windows 會將各類訊息輸入它們所應屬於的視窗函式。例如您在某個視窗按下滑鼠或選擇某個選單命令,系統當然要指明是在哪乙個視窗進行的,還記得訊息結構中的hwnd 嗎?在msg.h wnd 中就標示著訊息所應送達的視窗**,視窗函式在收到訊息後就以switch-case 的方式來拾取它所關心的訊息並加以處理,至於不是該視窗所要處理的訊息則在default 處交給乙個叫defwindowproc() 的函式處理。def:wndowproc() 是乙個標準視窗處理函式(default window

procedure) ,它會以windows 的方式來處理訊息例如視窗的放大縮小移動等標準的處理動作。

這種處理方式也有人稱為「事件驅動方式」(event-driven)即事件(訊息)才會引發動作,程式並不會主動做任何事,事件驅動的觀念在windows 程式設計中十分重要,等你學會windows程式的基本結構之後方能體會它的基本精神!

windows 程式的流程

winmain()是windows 程式的起始函式,通常它會做視窗註冊,建立視窗,顯示視窗的動作然後進入訊息迴圈,此迴圈會不斷地往訊息佇列中讀取訊息,一旦取得訊息立刻用dispatch massage()通過系統來呼叫訊息處理函式,如此一直迴圈直到getmassage()找不到訊息讓出控制權才暫告休息。

wndproc()是處理訊息的函式或稱視窗,函式wndproc()統一由windows 來呼叫,為一**型的函式。wndproc()按訊息來做出響應,是控制視窗行為的過程。

windows 的程式流程如下:

外部輸入動作發生被轉換成訊息

放入訊息queue

由get message()讀訊息

dispatch 訊息給windows

由windows **(call back)訊息處理函式(視窗函式)

讀一下訊息若無訊息則將控制權交回windows 由windows

將控制權交給下一程式

今天用Windows API寫的掃雷程式

minenumber 5 rows 10 cols 10 minenumber 10 box new box cols for int k 0 kbox i j isopened true numberopened if numberopened rows cols minenumber autoo...

MFC成長季 windows API程式邏輯

再過2個小時就要到上海比賽去了。閒暇時光還是和往常一樣,乙個人坐在辦公室,不喜歡在寢室。戀愛季,難免會多花點錢,昨晚老媽嚴厲批評了我,今早老爸 就一句話,卡號給我。自己看windows api mfc很久了,尚未入門。反思自己,學習觀上,心態不正 方 上,借用 一代宗師 一句話,老猿掛印回首望,關隘...

34 Windows API 程式安裝與設定

windows上有兩種主流的程式安裝技術,一種是編寫 setup.exe 檔案,在程式安裝時讀取 inf配置檔案,將壓縮儲存於 cab檔案中的檔案釋放到指定位置,並進行環境設定。第二種方法是使用 windows installer 服務建立 msi檔案,由 windows 服務讀取 msi檔案中的配...