C#把子控件的MouseUP MouseDown MouseMove三个事件提交到父控件
2009-01-20 17:20
597 查看
相当于 this.KeyPreview = true;的效果只是我之添加了几个事件而已.
很简单使用HOOK 获取消息 计算坐标返回到指定控件上
使用方法
private MousePreview m_MousePreview;
private void Form1_Load(object sender, EventArgs e)
{
m_MousePreview = new MousePreview(panel1);
}
下面是全部的类
很简单使用HOOK 获取消息 计算坐标返回到指定控件上
使用方法
private MousePreview m_MousePreview;
private void Form1_Load(object sender, EventArgs e)
{
m_MousePreview = new MousePreview(panel1);
}
下面是全部的类
/// <summary> /// 把鼠标 DOWN UP MOVE 三个事件提交到父窗体上 /// zgke@sina.com /// </summary> public class MousePreview { [DllImport("kernel32")] public static extern int GetCurrentThreadId(); [DllImport("user32", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] public static extern int SetWindowsHookEx(int idHook, HOOKPROC lpfn, int hmod, int dwThreadId); [DllImport("user32.dll", EntryPoint = "SendMessage")] public static extern int SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public delegate int HOOKPROC(int nCode, int wParam, int lParam); private Control m_Control; public MousePreview(Control p_Control) { SetWindowsHookEx(7, new HOOKPROC(MyMouseProc), 0, GetCurrentThreadId()); m_Control = p_Control; } public int MyMouseProc(int nCode, int wParam, int lParam) { if (nCode == 0) { GC.Collect(); GC.WaitForPendingFinalizers(); GC.Collect(); Rectangle _Rect = m_Control.RectangleToScreen(m_Control.ClientRectangle); if (!_Rect.Contains(Cursor.Position)) return 0; short _X = (short)(Cursor.Position.X - _Rect.X); short _Y = (short)(Cursor.Position.Y - _Rect.Y); int _Point = _Y << 16; _Point += _X; switch (wParam) { case 512: SendMessage(m_Control.Handle, 512, wParam, _Point); break; case 513: SendMessage(m_Control.Handle, 513, wParam, _Point); break; case 514: SendMessage(m_Control.Handle, 514, wParam, _Point); break; case 516: SendMessage(m_Control.Handle, 516, wParam, _Point); break; case 517: SendMessage(m_Control.Handle, 517, wParam, _Point); break; default: break; } } return 0; } }
相关文章推荐
- C#在WebBrowser控件中添加MouseMove、MouseDown、MouseUp事件
- C#中 MouseLeftButtonDown MouseLeftButtonUp MouseMove 使用
- 发现 TSplitter 在嵌套时不好用, 索性写了个替代品(处理MouseDown,MouseMove,MouseUp,然后设定控件的Left值就可以了)
- mousedown mouseup focus click事件的触发顺序测试
- c#中contextMenuStrip与datagridview使用CellMouseDown事件及treeview使用mousedown事件
- javascript简单拖拽实现代码(鼠标事件 mousedown mousemove mouseup)
- 安卓——问题:控件(view)的OnTouch事件只能获取到ACTION_DOWN事件,UP、MOVE等事件都无法获取到
- mousedown\mouseup\click事件关系
- JavaScript鼠标事件onmousedown,onmousemove,onmouseout,onmouseover,onmouseup的用法和区别详解
- 控件的mouseUp事件无效问题
- mousedown\mouseup\click事件关系
- touchstart, touchmove, touchend, mousedown, mousemove, mouseup, 手机端和pc端点击及触摸事件
- javascript简单拖拽实现代码(鼠标事件 mousedown mousemove mouseup)
- Button中MouseLeftButtonDown和MouseLeftButtonUp事件无法触发的解决方案
- WinCE平台下的按钮控件没有MouseUp等事件
- C# •MouseDown •MouseDown •MouseUp 的先后顺序
- SilverLight学习笔记--如何解决Button不响应MouseLeftButtonDown与MouseLeftButtonUp事件的问题
- 【MARK】C# DataGridView控件单元格 未提交 内容改变事件
- Button中 MouseLeftButtonDown和MouseLeftButtonUp 事件无法触发的解决方案 (转)
- 如何解决Button不响应MouseLeftButtonDown与MouseLeftButtonUp事件的问题