【轉】Winform中在Form上截取消息的兩種方法

原文見:Winform中在Form上截取消息的兩種方法

比較常用的是重載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 class MessageFilter : 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 static MessageFilter msgFliter = new MessageFilter();
在Main方法中註冊消息篩選器:
Application.AddMessageFilter(msgFliter);
如果要取消註冊,可以調用Application.RemoveMessageFilter方法

在這裏有一個Windows的MessageID的枚舉,挺有用的,好幾次都忘了地址,這次寫在這裏好好保存
Windows Message ID constants
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章