c# 消息機制


1.windows系統是一個消息驅動的系統,windows本身有自己的消息隊列。

 系統傳遞消息給應用程序。

 應用程序的消息機制:應用程序的執行是通過消息驅動的。消息是整個應用程序的工作引擎。

2.c#重新定義了Message。

  公共屬性: HWnd     獲取或設定消息的處理函數
           Msg      獲取或設定消息的ID號
           Lparam   指定消息的LParam字段
           Wparam   指定消息的WParam字段
           Result   指定為響應消息處理函數而向OS系統返回的值

 消息被封裝成了事件

    1.Run以啟動當前線程上的應用程序消息循環

    2.C#中用Application類來處理消息的接收和發送的,消息的循環是由它負責的。

3.消息驅動過程:

  1.鍵盤輸入、鼠標移動、按動鼠標都由OS系統轉換成相應的消息發送到應用程序的消息隊列。

  2.分發這些消息到對應的窗體,然后由窗體的處理函數來處理。(窗體對象的第一個響應函數是對象中的protected override void WndProc(ref System.Windows.Forms.Message e)方法。再根據消息的類型調用默認的消息響應函數。)

4.消息過濾器舉例:

  第一種:重寫WinProc

    protected override void WndProc(ref Message m)   
    {   
       if (m.Msg == 0x0201)   
         return;   
       else   
         base.WndProc(ref m);   
    }   

   第二種:不重寫WinProc

//實現消息過濾器接口   
public class CLButtonDownFilter : IMessageFilter   
{   
public bool PreFilterMessage(ref Message m)   
{   
if (m.Msg == 0x0201)// WM_LBUTTONDOWN   
{   
   //返回值為true, 表示消息已被處理,不要再往后傳遞,因此消息被截獲   
   //返回值為false,表示消息未被處理,需要再往后傳遞,因此消息未被截獲   
   return true;   
}   
return false;   
}   
}   
  
CLButtonDownFilter MyFilter = new CLButtonDownFilter();   
System.Windows.Forms.Application.AddMessageFilter(MyFilter);  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM