windows訊息機制

來源:互聯網
上載者:User

標籤:發送   分發   結構   自訂   建立   使用者   通過   程式   log   

一. windows訊息機制處理流程

(1)windows會為每一個正在執行的windows應用程式建立一個訊息佇列,即應用程式隊列,用來存放該程式可能建立的各種視窗的訊息。

        當應用程式發生事件後,windows將事件轉化為訊息並將訊息放入應用程式的訊息佇列中。

(2)應用程式通過GetMessage從訊息佇列中檢索事件訊息並把他們分發到相應視窗的訊息處理函數中。

       

while(GetMessage(&msg, NULL, 0, 0)){    // 將虛擬鍵訊息轉換為字元訊息    TranslateMessage(&msg);       // 將msg結構回傳給windows然後windows將    // 該訊息發送到適當的視窗訊息處理函數    DispatchMessage(&msg);    }

二. windows訊息機制要點

(1)視窗過程

       每個視窗會有一個稱為視窗過程的回呼函數(WndProc),當視窗收到訊息時系統就回調用此視窗過程來處理訊息

(2)訊息類型

       訊息類型分為系統定義訊息(視窗訊息、命令訊息、控制項通知訊息)和使用者自訂訊息

       a. 視窗訊息:與視窗的內部運作有關,如視窗建立、繪製、顯示、銷毀等

       b. 命令訊息:與處理使用者請求有關,如單擊功能表項目或工具列或控制項等

       c. 控制項通知:WM_NOTIFY訊息,最靈活的訊息格式

       d. 使用者自訂訊息WM_USER + 100(習慣性)

(3)訊息佇列

       a. 系統訊息佇列

       b. 線程訊息佇列:每一個GUI線程都會維護這樣一個線程訊息佇列。這個隊列只有線上程調用GDI函數時才會建立,預設部建立 

                              然後線程訊息佇列中的訊息會被送到相應的視窗過程處理。

                              注意:線程訊息佇列中的WM_PAINT、WM_TIME只有在Queue中沒有其他訊息時才會被處理

 

windows訊息機制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.