如何在C#中捕捉鼠标事件

pijh 2003-02-13 11:33:46
如何在C#中捕捉鼠标事件
...全文
124 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sarmoo 2003-02-17
  • 打赏
  • 举报
回复
转:
一个微软工程师在CSDN的回答。

-----------------------------
的确有很多开发人员问过同样的问题,就是“WinForm中,键盘事件可以通过Form.KeyPreview捕捉,那么鼠标事件有没有Form.MousePreview?”。首先,直接的答案是没有。但是,另外有一些效果类似的解决方法,比如可以在Form_Load的时候遍历所有的Form.Controls,为每一个Control添加同一个鼠标处理函数。

另外一个方法是使用Mouse Hook。您可以在WinForm程序中添加如下的代码:

[DllImport( "kernel32 ")]
public static extern int GetCurrentThreadId();

[DllImport( "user32 ", CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(HookType idHook,HOOKPROC lpfn,int hmod,int dwThreadId);

public enum HookType{
WH_MOUSE = 7
}

public delegate int HOOKPROC(int nCode, int wParam, int lParam);

public void SetHook(HOOKPROC callbackProc){
SetWindowsHookEx(HookType.WH_MOUSE,callbackProc,0,GetCurrentThreadId());
}

private void Form1_Load(object sender, System.EventArgs e){
SetHook(new HOOKPROC(this.MyMouseProc));
}

public int MyMouseProc(int nCode, int wParam, int lParam){
if(nCode==0 && wParam==514){ //if left button down.
MessageBox.Show( "Mouse left button clicked. LParam= "+lParam);
}
return 0; //return 1 to trap the mouse event
}

这样就可以在子控件处理鼠标事件之前截获并处理之。不过,一般不推荐这样做,因为可能出现一些不稳定的情况。
sarmoo 2003-02-13
  • 打赏
  • 举报
回复
实现IMessageFilter接口,然后判断消息是否为鼠标操作,进行处理。

111,116

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧