C#应用程序范围的鼠标左键单击事件

时间:2011-10-28 20:36:39

标签: c# winforms

我希望在我的表单中的任何位置单击鼠标左键时播放声音,而不必在表单中的每个控件上放置鼠标单击事件。有没有办法实现这个目标?

4 个答案:

答案 0 :(得分:7)

您可以在将Windows通知发送到具有IMessageFilter接口焦点的控件之前检测它。使它看起来类似于:

public partial class Form1 : Form, IMessageFilter {
    public Form1() {
        InitializeComponent();
        Application.AddMessageFilter(this);
        this.FormClosed += delegate { Application.RemoveMessageFilter(this); };
    }

    public bool PreFilterMessage(ref Message m) {
        // Trap WM_LBUTTONDOWN
        if (m.Msg == 0x201) {
            System.Diagnostics.Debug.WriteLine("BEEP!");
        }
        return false;
    }
}

这适用于项目中的任何表单,而不仅仅是主要表单。

答案 1 :(得分:3)

这应该可以解决问题

const int WM_PARENTNOTIFY = 0x210;
const int WM_LBUTTONDOWN = 0x201;

protected override void WndProc(ref Message m)
{
    if (m.Msg == WM_LBUTTONDOWN || (m.Msg == WM_PARENTNOTIFY && (int)m.WParam == WM_LBUTTONDOWN)) 
         DoIt();
    base.WndProc(ref m);
}

答案 2 :(得分:0)

This project可能对您的需求有些过分(因为它会挂钩全局鼠标事件,而不仅仅是表单上的事件),但我认为它显示了您需要的基础知识。

答案 3 :(得分:0)

案例WM_PARENTNOTIFY    选择案例Wparam        案例513'WM_LBUTTODOWN          播放声音    结束选择

使用Vb或Vba