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);
