1. 程式人生 > >windows訊息機制與ASP.net winform控制元件訊息傳遞之滑鼠點選click事件

windows訊息機制與ASP.net winform控制元件訊息傳遞之滑鼠點選click事件

window系統是一個訊息驅動的系統, windows作業系統本身有自己的訊息佇列,訊息迴圈,它捕捉鍵盤,滑鼠的動作生成訊息,並將這個訊息傳給應用程式的訊息佇列。
當用戶用滑鼠click桌面時,其實使用者是不能直接接觸到某個控制元件的。表面上看,的確是使用者用滑鼠點選了一下按鈕。而實際上,當用戶按下滑鼠左鍵的時候是通過滑鼠向Windows作業系統傳送了一個“左鍵單擊[x,y]點”訊息,然後Windows再根據[x,y]的位置把這個訊息分配(路由)給應該接收它的控制元件——這就是Windows的訊息傳遞/路由機制。
同理,當你移動滑鼠的時候,看似好像指標在隨你的意願移動,而實際上是你的滑鼠在以每秒鐘幾百次的頻率把當前位置彙報給Windows作業系統,然後Windows再把一個漂亮的指標“畫”在螢幕上給你看。
然而這些內容對於C#程式設計師都是不可見的——都被封裝成了“事件”。因此,從Windows系統的機理上講,事件機制就是對Windows訊息傳遞機制的包裝。

從windows訊息機制來看,滑鼠點選的流程是這樣:
使用者在桌面點選了滑鼠,根據前面所述,windows系統根據滑鼠移動的軌跡算出滑鼠現在的座標,win系統根據座標位置把click訊息告知當前活動視窗程式訊息迴圈.
這裡寫圖片描述

當前視窗訊息迴圈獲取到click訊息後則自動呼叫該控制元件control類物件的onclick函式(控制元件物件的onclick函式是對control類onclick的重寫,但我們看不到如何自動呼叫onclick函式這個過程),在onclick函式體內觸發該物件的click事件。
這裡寫圖片描述

click事件如果有註冊方法,則呼叫該註冊方法.
這裡寫圖片描述