在傳統的作業系統裡,程式採用的是程序設計模型(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提供了很多函式,像是建立視窗、畫圖或是處理檔案等等。
沒有留言:
張貼留言