“訊息”是windows運行機制中一個基本而又重要的概念。訊息是一個報告事件發生的通知,訊息驅動是圍繞訊息的產生與處理展開的,並依靠訊息循環機制來實現。
基本介紹
驅動訊息,訊息傳送,傳送訊息,寄送訊息,訊息處理,套用支持,基本模組,應用程式,
驅動訊息
從程式設計的觀點看,某條訊息可被視為某個事件的發生,比如點擊滑鼠。事件即可以由用戶引發,也可以由應用程式產生,當然Windows本身也能發出訊息。Windows應用程式的訊息來源有4種:輸入訊息,控制訊息,系統訊息,用戶訊息。
Windows是一個多任務作業系統,所以沒有哪一個程式能夠獨占系統的資源,資源都是由Windows統一管理的。那么某個程式是如何獲得用戶的信息呢?事實上,Windows在時刻監視著用戶的每個舉動,並分析用戶的動作與哪一個程式相關,然後將動作以訊息的形式傳送給當前的應用程式。相反,應用程式也在時時等著訊息的到來,一旦發現它的訊息佇列中有未處理的信息,就獲取並分析該訊息,並根據訊息所包含的內容採取適當的動作來回響。這裡我們引出另一個概念“訊息驅動”。比如當你單擊file選單的時候,首先這個動作被windows所捕獲,而不是應用程式。經分析windows知道該動作該由哪個應用程式處理,然後windows就傳送WM_COMMAND訊息給該應用程式,它告訴應用程式,你單擊了file選單。應用程式得知這一訊息後,便採取相應的動作來回響它,進行“訊息處理”。Windows為每個執行緒維護了相應的訊息佇列,應用程式的任務就是不停地從特定的訊息佇列中獲取訊息、分析訊息並處理訊息,直到訊息(WM_QUIT)為止。這個過程的程式結構稱為“訊息循環”。
訊息傳送
傳送訊息
傳送一個訊息時,系統直接調用視窗進程。通信是即時的。直到視窗進程為調用函式返回一個結果後,應用程式才能繼續。
寄送訊息
寄送一個訊息時,系統把訊息傳送到擁有該視窗的應用程式訊息佇列中。訊息佇列是系統定義的一個記憶體塊,用於臨時存儲訊息,或是把訊息直接發給視窗過程。每個視窗維護自己的訊息佇列,從中取出訊息,利用視窗函式進行處理。一有空閒,應用程式就搜尋訊息佇列,並在訊息佇列中處理訊息,即從佇列中刪除他們。調用函式傳送訊息後就立即返回,但結果只是表示訊息寄送成功與否,而不表示被調用視窗進程的結果。通常滑鼠和鍵盤訊息是寄送的。
訊息處理
Windows程式在處理訊息時使用了“回調函式”的特殊函式。這個函式由應用程式定義,但並不由應用程式來調用,而是供作業系統或者其子系統來調用的。這種調用通常在某一事件發生,或者在視窗或字型被枚舉時發生。Windows向程式設計師所能傳送的訊息多達百種,但是,對於一般的應用程式來說,只是其中的一部分有意義。
套用支持
基本模組
Windows作業系統包括3個核心基本模組:
GDI:負責在螢幕上繪製象素、列印硬拷貝輸出,繪製用戶界面
KERNEL:支持與作業系統密切相關的功能。如進程載入,系統調用