Windows消息機制

  • 概述
在Windows中發生的一切都可以用消息來表示,消息用於告訴操作系統發生了什麼,所有的Windows應用程序都是消息驅動的。 一個消息是由消息的名稱(UINT)和兩個參數(WPARAM, LPARAM)組成。消息的參數中包含有重要的信息。例如對鼠標消息而言,LPARAM中一般包含鼠標的位置信息,而WPARAM參數中包含了發生該消息時,SHIFT、CTRL等鍵的狀態信息,對於不同的消息類型來說,兩個參數也都相應地具有明確意義。(摘自百度百科)
  • 消息隊列

消息隊列分爲:系統消息隊列、線程消息隊列(應用程序消息隊列)

系統消息隊列:這是系統唯一的隊列,輸入設備(鼠標、鍵盤等)的驅動程序把用戶的操作轉換成消息的形式放置到系統隊列中,然後系統會把此消息轉到目標窗口所在的線程消息隊列中等待處理。

線程消息隊列:每個GUI(圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指採用圖形方式顯示的計算機操作用戶界面)線程都會維護一個線程消息隊列,(這個隊列只有在線程調用 User 或者 GDI 函數時纔會創建,默認並不創建)。然後線程消息隊列中的消息會被本線程的消息循環(有時也被稱爲消息泵)派送到相應的窗口過程(也叫窗口回調函數)處理。

  • 補充

消息循環(消息泵):Windows爲當前執行的每一個Windows程序維護一個消息隊列,在發生輸入事件後,Windows將事件轉換爲一個消息,並將消息放入程序的消息隊列中。程序通過執行一塊稱之爲「消息循環」的程序代碼從消息隊列中取出消息。代碼如下:

while(GetMessage (&msg, NULL, 0, 0))
{
    TranslateMessage (&msg) ;
    DispatchMessage (&msg) ;
}

在線程中運行該函數,並使用while循環不斷獲取SendMessage()、PostMessage()或硬件事件發送過來的消息,並使用GetMessage()接收,傳輸過程中可以自己組裝需要傳輸的數據(此處不做解釋)。

  • 參考文獻
博客:https://www.cnblogs.com/skyofbitbit/p/3649104.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章