Windows的消息处理系统
windows消息处理机制一般分为三个部分:
1.消息队列:Windows的消息一般是由Windows统一在一个消息队列中进行管理
2.消息循环:应用程序从消息队列中获取自己的消息,并将其分配给窗体方法进行处理
3.窗口过程:负责处理接收到的消息,每个窗口都有对应的窗口过程,负责截获消息并 进行响应,WinProc是窗口处 理方法,负责处理接收到的消息。一般我们处理程序时,不会注意到这个函数,系统会自动替我们生 成,WinProc方法通过switch··case语句判断消息并进行处理, 如果有case中没有出现的情况,系统会调
用DefWinProc方法进行处理,所以在用户的自定义消息中,可以通过重载DefWinProc方法的 switch···case语句进行处理
protected override void WndProc(ref Message m) //对WndProc进行重写,实现用户的需求
{
switch (m.Msg)
{
case 0x4e:
case 0xd:
case 0xe:
case 0x14:
base.WndProc(ref m); //调用基类的WndProc方法
break;
case 0x84:
this.DefWndProc(ref m); //鼠标点击任意位置后都可以进行拖动窗体,重写这个方法。
if(m.Result.ToInt32()==0x01)
{
m.Result = new IntPtr(0x02);
}
break;
case 0xA3: //禁止双击最大化
break;
default:
base.WndProc(ref m);
break;
}
}
|