2010年10月25日

[C++學習筆記]Windows 程式設計模型

在傳統的作業系統裡,程式採用的是程序設計模型(procedural programming model),什麼是程序設計模型呢?程序設計模型指的是程式會按照順序由上而下的執行。例如在傳統的C語言裡,程式會從main函式的第一行開始執行到main的最後一行,雖然中間有可能會因為user輸入的東西不同,進入不同的function,但是我們還是可以大概了解程式的執行過程。在傳統的這種C程式裡,呼叫函式是由這個程式的main來決定的。


 

Windows 程式的運作程式和傳統的方法不一樣,Windows程式的運作是採用事件驅動(event-driven)的模型,「事件」(event)就是敲一下鍵盤或是按一下滑鼠這些動作。

我們可以把WinMain當成Windows程式的main function ,WinMain會先建立視窗之後進入訊息迴圈(message loop),訊息迴圈會不斷的收取訊息,再把訊息分配給視窗程式裡,再由視窗程式來負責處理送到視窗的訊息。


 

什麼是訊息呢?訊息從哪裡來?又代表什麼意義呢?Windows定義了許多不同的訊息型態,大部分的訊息名稱,都是由「WM_」開頭的,如下表:

訊息

意義

WM_CHAR

從鍵盤輸入字元

WM_CREATE

建立視窗的時候

WM_DESTROY

視窗被摧毀的時候

WM_LBUTTONDOWN

按下滑鼠左鍵

WM_LBUTTONUP

放開滑鼠左鍵

WM_MOUSEMOVE

移動滑鼠時

WM_PAINT

重新繪製視窗

WM_QUIT

結束應用程式時

WM_SIZE

視窗大小改變時


 

舉個例子來說,當我們按下視窗程式右上角的「X」時,就會產生WM_QUIT的訊息。

訊息產生之後,就會被留在一個訊息佇列中,直到訊息被收取為止。

當視窗程式收取到WM_QUIT這個訊息的時候(代表應用程式應該要結束),因此訊息迴圈會結束,訊息迴圈結束之後應用程式也會跟著結束。


 

視窗程式怎麼處理收到的訊息呢?通常視窗程式會呼叫其他的函式來處理收到的訊息,例如:Windows提供的API 函式或是程式裡的其他函式。

而Win32 API提供了很多函式,像是建立視窗、畫圖或是處理檔案等等。

沒有留言: