標籤:style color io os 使用 ar for sp div
比較常用的是重載Form的DefWndProc方法,例如截取滑鼠按下的訊息:
protected override void DefWndProc(ref Message m)
{
if ( m.Msg == 0x0201 )
{
MessageBox.Show(m.Msg.ToString());
}
else
{
base.DefWndProc (ref m);
}
}
還可以通過另一種辦法,使用IMessageFilter 介面:
public classMessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x0201)
{
MessageBox.Show("WM_LBUTTONDOWN is: " +m.Msg);
return true;
}
return false;
}
}
然後使用Application.AddMessageFilter方法,例如:
private staticMessageFilter msgFliter = new MessageFilter();
在Main方法中註冊訊息篩選器:
Application.AddMessageFilter(msgFliter);
如果要取消註冊,可以調用Application.RemoveMessageFilter方法
在這裡有一個Windows的MessageID的枚舉,挺有用的,好幾次都忘了地址,這次寫在這裡好好儲存
Windows Message IDconstants
一、截取系統訊息
方法一:
//添加監視訊息
private void Form_Load(object sender, System.EventArgs e)
{
Application.AddMessageFilter(this);
}
//撤消訊息監視
private void Form_Closing(object sender,System.ComponentModel.CancelEventArgs e)
{
Application.RemoveMessageFilter(this);
}
//截取訊息,進行處理
public bool PreFilterMessage(ref System.Windows.Forms.Messagem)
{
switch(m.Msg )
{
case 513: //攔截左鍵單擊事件
MessageBox.Show("哈哈,你點擊了左鍵被攔截!");
return true; //返回true則訊息被裁取,系統不再處理
case 516: //攔截左鍵單擊事件
MessageBox.Show("哈哈,你點擊了右鍵被攔截!");
return true; //返回true則訊息被裁取,系統不再處理
default:
return false; //返回false則訊息未被裁取,系統會處理
}
}
方法二:
//截取訊息,進行處理
protected override void WndProc(ref Messagem)
{
switch(m.Msg)
{
case 17:
MessageBox.Show("哈哈,你不能關閉電腦!");
m.Result=(IntPtr)0;
break;
case 513:
MessageBox.Show("哈哈,你不能點擊左鍵!");
m.Result=(IntPtr)0;
break;
case 516:
MessageBox.Show("哈哈,你不能點擊右鍵!");
m.Result=(IntPtr)0;
break;
default:
base.WndProc(ref m);
break;
}
}
C#實現在Form上截取訊息的兩種方法