程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> Windows消息機制

Windows消息機制

編輯:.NET實例教程

Windows操作系統最大的特點就是其圖形化的操作界面,其圖形化界面是建立在其消息處理機制這個基礎之上的。如果不理解Windows消息處理機制,肯定無法深入的理解Windows編程。可惜很多程序員對Windows消息只是略有所聞,對其使用知之甚少,更不了解其內部實現原理,本文試著一步一步向大家披露我理解的Windows消息機制。可以說,掌握了這一部分知識,就是掌握了Windows編程中的神兵利器,靈活運用它,將會極大的提高我們的編程能力。

 

一、       消息概述

Windows窗體是怎樣展現在屏幕上的呢?眾所周知,是通過API繪制實現的。Windows操作系統提供了一系列的API函數來實現界面的繪制功能,例如:

        DrawText 繪制文字

        DrawEdge 繪制邊框

        DrawIcon 繪制圖標

        BitBlt 繪制位圖

        Rectangle 繪制矩形

        …

再復雜的程序界面都是通過這個函數來實現的。

那什麼時候調用這些函數呢?顯然我們需要一個控制中心,用來進行“發號施令”,我們還需要一個命令傳達機制,將命令即時的傳達到目的地。這個控制中心,就是一個動力源,就像一顆心髒,源源不斷地將血液送往各處。這個命令傳達機制就是Windows消息機制,Windows消息就好比是身體中的血液,它是命令傳達的使者。

Windows消息控制中心一般是三層結構,其頂端就是Windows內核。Windows內核維護著一個消息隊列,第二級控制中心從這個消息隊列中獲取屬於自己管轄的消息,後做出處理,有些消息直接處理掉,有些還要發送給下一級窗體(Window)或控件(Control)。第二級控制中心一般是各Windows應用程序的Application對象。第三級控制中心就是Windows窗體對象,每一個窗體都有一個默認的窗體過程,這個過程負責處理各種接收到的消息。

 

消息是以固定的結構傳送給應用程序的,結構如下:

Public Type MSG

     hwnd As Long

     message As Long

     wParam As Long

     lParam As Long

     time As Long

     pt As POINTAPI

End Type

其中hwnd是窗體的句柄,message是一個消息常量,用來表示消息的類型,wParam和lParam都是32位的附加信息,具體表示什麼內容,要視消息的類型而定,time是消息發送的時間,pt是消息發送時鼠標所在的位置。

Windows操作系統中包括以下幾種消息:

1、標准Windows消息:

這種消息以WM_打頭。

2、通知消息

通知消息是針對標准Windows控件的消息。這些控個包括:按鈕(Button)、組合框(ComboBox)、編輯框(TextBox)、列表框(ListBox)、ListView控件、TreevIEw控件、工具條(Toolbar)、菜單(Menu)等。每種消息以不同的字符串打頭。

3、自定義消息

編程人員還可以自定義消息。

 

二、            關於Windows句柄

不是每個控件都能接收消息,轉發消息和繪制自身,只有具有句柄(handle)的控件才能做到。有句柄的控件本質上都是一個窗體(window),它們可以獨立存在,可以作為其它控件的容器,而沒有句柄的控件,如Label,是不能獨立存在的,只能作為窗口控件的子控件,它不能繪制自身,只能依靠父窗體將它繪制來。

句柄的本質是一個系統自動維護的32位的數值,在整個操作系統的任一時刻,這個數值是唯一的。但該句柄代表的窗體釋放後,句柄也會被釋放,這個數值又可能被其它窗體使用。也就是說,句柄的數值是動態的,它本身只是一個唯一性標識,操作系統通過句柄來識別和查找它所代表的對象。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved