protected override void DefWndProc(ref Message m)
{
if (m.Msg == 0x0201) // WM_LBUTTONDOWN
MessageBox.Show(m.Msg.ToString());
else
base.DefWndProc(ref m);
}
public class MessageFilter : IMessageFilter
{
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 0x0201)
{
MessageBox.Show("WM_LBUTTONDOWN is: " + m.Msg);
return true; // 過濾掉,不再分派
}
return false;
}
}
// 註冊
private static MessageFilter msgFilter = new MessageFilter();
[STAThread]
static void Main()
{
Application.AddMessageFilter(msgFilter);
Application.Run(new Form1());
}
// 移除註冊
Application.RemoveMessageFilter(msgFilter);
建議保存 WM_LBUTTONDOWN=0x0201、WM_RBUTTONDOWN=0x0204、WM_KEYDOWN=0x0100 等常用值供查閱。
差異:DefWndProc 僅影響該表單;IMessageFilter 影響整個應用程式訊息迴圈。