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

1
2
3
4
5
6
7
protected override void WndProc(ref Message m)  
{  
   if (m.Msg == 0x0201)  
     return;  
   else  
     base.WndProc(ref m);  
}  

   第二种:不重写WinProc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//实现消息过滤器接口  
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); 

 

 
分类: 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

1
2
3
4
5
6
7
protected override void WndProc(ref Message m)  
{  
   if (m.Msg == 0x0201)  
     return;  
   else  
     base.WndProc(ref m);  
}  

   第二种:不重写WinProc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//实现消息过滤器接口  
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); 

 

 
分类: c#