如果需要对Winform中某个控件消息进行特殊处理时,可以重写控件自带【WndProc】函数;
- WndProc 函数作用:
主要用在拦截并处理系统消息和自定义消息
例:windows程序会产生很多消息,比如你单击鼠标,移动窗口都会产生消息。这个函数就是默认的消息处理函数。你可以重载这个函数来定制自己的消息处理流程。
- 使用示例1:
在Winform程序中,可以重写WndProc函数,来捕捉所有发生的窗口消息。
这样,我们就可以"篡改"传入的消息,而人为的让窗口改变行为。
protected override void WndProc(ref System.Windows.Forms.Message m)
{
//监控:拦截窗体最小化按钮消息
if (m.Msg == 0x0112) {
if (m.WParam.ToInt32() == 0xF020) {
//制定自己处理
this.Visible = true;
return;
}
}
//执行默认消息
base.WndProc(ref m);
}
- 使用示例2:
protected override void WndProc(ref System.Windows.Forms.Message m)
{
//m.Msg == 675 mouseleave;
//m.Msg == 512 mousemove;
//m.Msg == 256 keydown;
//m.Msg == 257 keyup;
//m.Msg == 514 leftbuttonup;
//m.Msg == 513 leftbuttondown;
//m.Msg == 515 WM_LBUTTONDBLCLK
if (m.Msg ==515||m.Msg==256||m.Msg ==513) {
frmShow f = new frmShow();
f.Location=this.Location;
f.Show();
return;
}
base.WndProc (ref m);
if (m.Msg==0xf || m.Msg==0x133) {
this.DrawBorder();
}
}
/**
*定制Border方法
*
**/
private void DrawBorder()
{
System.Windows.Forms.ControlPaint.DrawBorder(this.CreateGraphics(),new System.Drawing.Rectangle(1,1,this.Width-2,this.Height-2),this.m_BorderColorIn,this.m_BorderColorStyle);
System.Windows.Forms.ControlPaint.DrawBorder(this.CreateGraphics(),new System.Drawing.Rectangle(0,0,this.Width,this.Height),this.m_BorderColorOut,this.m_BorderColorStyle);
}