拦截信息方法

但是你可以拦截这个控件的双击消息。 以下代码可加在控件的父窗口(假设为Form1),并在Form1初始化后安装拦截挂钩。同样的方法也可屏蔽那控件的其它消息,如屏蔽它的右键事件。

private const int GWL_WNDPROC = -4;

private const int WM_LBUTTONDOWN=0x0201;

private const int WM_LBUTTONUP=0x0202;

private const int WM_LBUTTONDBLCLK=0x0203;//双击消息

[DllImport("user32.dll", CharSet = CharSet.Auto)]

private static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, MyWndProc wndProc);

[DllImport("user32.dll", CharSet = CharSet.Auto)]

private static extern IntPtr CallWindowProc(IntPtr wndProc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

 

public delegate IntPtr MyWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

 

private IntPtr OldWndProc = IntPtr.Zero;

private MyWndProc Wpr = null;

private IntPtr MyControlWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam) {

 switch (msg)

 { case WM_LBUTTONDBLCLK://拦截双击消息

/*在这里,你想干什么就干什么*/

....................... .......................

return (IntPtr)0;

default:

 return CallWindowProc(OldWndProc, hWnd, msg, wParam, lParam);

}

}

//假设那个控件变量名为 _thatControl

 

private void InitializeThatControl()

{ //初始化的时候安装消息拦截

this.Wpr = new MyWndProc(this.MyControlWndProc);

this.OldWndProc = SetWindowLong(_thatControl.Handle, GWL_WNDPROC, Wpr);

}

 

public Form1()

 {

InitializeComponent();

InitializeThatControl();//加这句,在Form初始化后安装消息拦截

}

 

posted @ 2013-08-23 21:16  王力之  阅读(1520)  评论(0编辑  收藏  举报