C#小白中的小白求助:C#如何实现自定义的windows消息的事件处理。

时间:2022-08-30 22:54:10
当前C#代码中重写了窗口过程wndproc来处理vc发来的定义消息。但我想用C#的事件处理方式处理这个消息怎么做到。麻烦给个简单的核心代码。感谢。

5 个解决方案

#1


你都知道用WndProc来处理自定义消息了,那你想描述的相拥C#的时间处理方式处理这个消息是什么意思?
你意思是在WndProc拿到消息后要做一层封装,封装成C#的事件处理的方式,让其他地方调用的时候简单点?

阅读理解经常不及格,你看看是不是你要的那种模型...
public event EventHandler<WndProcEventArgs> MessageReceived;
protected override void WndProc(ref Message m)
{
    this.OnCustomMessage(new WndProcEventArgs()
    {
        msg = m
    });
    base.WndProc(ref m);
}
private void OnCustomMessage(WndProcEventArgs e)
{
    if (MessageReceived != null)
    {
        MessageReceived(this, e);
    }
}
public class WndProcEventArgs : EventArgs
{
    public Message msg
    {
        get;
        set;
    }
}

#2


引用 1 楼 Yokeqi 的回复:
你都知道用WndProc来处理自定义消息了,那你想描述的相拥C#的时间处理方式处理这个消息是什么意思?
你意思是在WndProc拿到消息后要做一层封装,封装成C#的事件处理的方式,让其他地方调用的时候简单点?

阅读理解经常不及格,你看看是不是你要的那种模型...
public event EventHandler<WndProcEventArgs> MessageReceived;
protected override void WndProc(ref Message m)
{
    this.OnCustomMessage(new WndProcEventArgs()
    {
        msg = m
    });
    base.WndProc(ref m);
}
private void OnCustomMessage(WndProcEventArgs e)
{
    if (MessageReceived != null)
    {
        MessageReceived(this, e);
    }
}
public class WndProcEventArgs : EventArgs
{
    public Message msg
    {
        get;
        set;
    }
}
对,想让别人容易理解点,特别是比我还菜的,符合这样的函数原型 void event_handler(object sender , EventArgs);别人只需要在这里面就可以操作了。怎么做到呢?比如处理C程序发过来的0x0453自定义消息。

#3


看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
/// <summary>
/// 自定义的消息值
/// </summary>
private const int C_CUSTOM_MSG = 0x0453;
/// <summary>
/// C发来自定义消息时触发的事件
/// </summary>
public event EventHandler CustomMsgReceived;
/// <summary>
/// 事件还可以这样定义,这样参数e就能附带更多的信息
/// </summary>
public event EventHandler<FormClosingEventArgs> FormClosingNew;
protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case C_CUSTOM_MSG:
            // 这里你检测到窗体接收了自定义消息
            if (CustomMsgReceived != null)
            {
                // 如果有人注册了事件,那么就触发
                CustomMsgReceived(this, new EventArgs());
            }
            break;
    }
    base.WndProc(ref m);
}

下面是别人调用的方式,就不用管C程序发来的是什么消息了:
private void button2_Click(object sender, EventArgs e)
{
    CustomMsgReceived += Form1_CustomMsgReceived;
}

private void Form1_CustomMsgReceived(object sender, EventArgs e)
{
    MessageBox.Show("C程序发来了自定义消息。");
}

#4


引用 3 楼 Yokeqi 的回复:
看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
/// <summary>
/// 自定义的消息值
/// </summary>
private const int C_CUSTOM_MSG = 0x0453;
/// <summary>
/// C发来自定义消息时触发的事件
/// </summary>
public event EventHandler CustomMsgReceived;
/// <summary>
/// 事件还可以这样定义,这样参数e就能附带更多的信息
/// </summary>
public event EventHandler<FormClosingEventArgs> FormClosingNew;
protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case C_CUSTOM_MSG:
            // 这里你检测到窗体接收了自定义消息
            if (CustomMsgReceived != null)
            {
                // 如果有人注册了事件,那么就触发
                CustomMsgReceived(this, new EventArgs());
            }
            break;
    }
    base.WndProc(ref m);
}

下面是别人调用的方式,就不用管C程序发来的是什么消息了:
private void button2_Click(object sender, EventArgs e)
{
    CustomMsgReceived += Form1_CustomMsgReceived;
}

private void Form1_CustomMsgReceived(object sender, EventArgs e)
{
    MessageBox.Show("C程序发来了自定义消息。");
}
忘记登录这个了,谢谢啊,我用了、

#5


引用 3 楼 Yokeqi 的回复:
看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
/// <summary>
/// 自定义的消息值
/// </summary>
private const int C_CUSTOM_MSG = 0x0453;
/// <summary>
/// C发来自定义消息时触发的事件
/// </summary>
public event EventHandler CustomMsgReceived;
/// <summary>
/// 事件还可以这样定义,这样参数e就能附带更多的信息
/// </summary>
public event EventHandler<FormClosingEventArgs> FormClosingNew;
protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case C_CUSTOM_MSG:
            // 这里你检测到窗体接收了自定义消息
            if (CustomMsgReceived != null)
            {
                // 如果有人注册了事件,那么就触发
                CustomMsgReceived(this, new EventArgs());
            }
            break;
    }
    base.WndProc(ref m);
}

下面是别人调用的方式,就不用管C程序发来的是什么消息了:
private void button2_Click(object sender, EventArgs e)
{
    CustomMsgReceived += Form1_CustomMsgReceived;
}

private void Form1_CustomMsgReceived(object sender, EventArgs e)
{
    MessageBox.Show("C程序发来了自定义消息。");
}
我本身实际上不太喜欢c#,对里面具体的东西没什么兴趣,使用纯粹工作所迫以及一切旧情。 C#小白中的小白求助:C#如何实现自定义的windows消息的事件处理。

#1


你都知道用WndProc来处理自定义消息了,那你想描述的相拥C#的时间处理方式处理这个消息是什么意思?
你意思是在WndProc拿到消息后要做一层封装,封装成C#的事件处理的方式,让其他地方调用的时候简单点?

阅读理解经常不及格,你看看是不是你要的那种模型...
public event EventHandler<WndProcEventArgs> MessageReceived;
protected override void WndProc(ref Message m)
{
    this.OnCustomMessage(new WndProcEventArgs()
    {
        msg = m
    });
    base.WndProc(ref m);
}
private void OnCustomMessage(WndProcEventArgs e)
{
    if (MessageReceived != null)
    {
        MessageReceived(this, e);
    }
}
public class WndProcEventArgs : EventArgs
{
    public Message msg
    {
        get;
        set;
    }
}

#2


引用 1 楼 Yokeqi 的回复:
你都知道用WndProc来处理自定义消息了,那你想描述的相拥C#的时间处理方式处理这个消息是什么意思?
你意思是在WndProc拿到消息后要做一层封装,封装成C#的事件处理的方式,让其他地方调用的时候简单点?

阅读理解经常不及格,你看看是不是你要的那种模型...
public event EventHandler<WndProcEventArgs> MessageReceived;
protected override void WndProc(ref Message m)
{
    this.OnCustomMessage(new WndProcEventArgs()
    {
        msg = m
    });
    base.WndProc(ref m);
}
private void OnCustomMessage(WndProcEventArgs e)
{
    if (MessageReceived != null)
    {
        MessageReceived(this, e);
    }
}
public class WndProcEventArgs : EventArgs
{
    public Message msg
    {
        get;
        set;
    }
}
对,想让别人容易理解点,特别是比我还菜的,符合这样的函数原型 void event_handler(object sender , EventArgs);别人只需要在这里面就可以操作了。怎么做到呢?比如处理C程序发过来的0x0453自定义消息。

#3


看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
/// <summary>
/// 自定义的消息值
/// </summary>
private const int C_CUSTOM_MSG = 0x0453;
/// <summary>
/// C发来自定义消息时触发的事件
/// </summary>
public event EventHandler CustomMsgReceived;
/// <summary>
/// 事件还可以这样定义,这样参数e就能附带更多的信息
/// </summary>
public event EventHandler<FormClosingEventArgs> FormClosingNew;
protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case C_CUSTOM_MSG:
            // 这里你检测到窗体接收了自定义消息
            if (CustomMsgReceived != null)
            {
                // 如果有人注册了事件,那么就触发
                CustomMsgReceived(this, new EventArgs());
            }
            break;
    }
    base.WndProc(ref m);
}

下面是别人调用的方式,就不用管C程序发来的是什么消息了:
private void button2_Click(object sender, EventArgs e)
{
    CustomMsgReceived += Form1_CustomMsgReceived;
}

private void Form1_CustomMsgReceived(object sender, EventArgs e)
{
    MessageBox.Show("C程序发来了自定义消息。");
}

#4


引用 3 楼 Yokeqi 的回复:
看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
/// <summary>
/// 自定义的消息值
/// </summary>
private const int C_CUSTOM_MSG = 0x0453;
/// <summary>
/// C发来自定义消息时触发的事件
/// </summary>
public event EventHandler CustomMsgReceived;
/// <summary>
/// 事件还可以这样定义,这样参数e就能附带更多的信息
/// </summary>
public event EventHandler<FormClosingEventArgs> FormClosingNew;
protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case C_CUSTOM_MSG:
            // 这里你检测到窗体接收了自定义消息
            if (CustomMsgReceived != null)
            {
                // 如果有人注册了事件,那么就触发
                CustomMsgReceived(this, new EventArgs());
            }
            break;
    }
    base.WndProc(ref m);
}

下面是别人调用的方式,就不用管C程序发来的是什么消息了:
private void button2_Click(object sender, EventArgs e)
{
    CustomMsgReceived += Form1_CustomMsgReceived;
}

private void Form1_CustomMsgReceived(object sender, EventArgs e)
{
    MessageBox.Show("C程序发来了自定义消息。");
}
忘记登录这个了,谢谢啊,我用了、

#5


引用 3 楼 Yokeqi 的回复:
看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
/// <summary>
/// 自定义的消息值
/// </summary>
private const int C_CUSTOM_MSG = 0x0453;
/// <summary>
/// C发来自定义消息时触发的事件
/// </summary>
public event EventHandler CustomMsgReceived;
/// <summary>
/// 事件还可以这样定义,这样参数e就能附带更多的信息
/// </summary>
public event EventHandler<FormClosingEventArgs> FormClosingNew;
protected override void WndProc(ref Message m)
{
    switch (m.Msg)
    {
        case C_CUSTOM_MSG:
            // 这里你检测到窗体接收了自定义消息
            if (CustomMsgReceived != null)
            {
                // 如果有人注册了事件,那么就触发
                CustomMsgReceived(this, new EventArgs());
            }
            break;
    }
    base.WndProc(ref m);
}

下面是别人调用的方式,就不用管C程序发来的是什么消息了:
private void button2_Click(object sender, EventArgs e)
{
    CustomMsgReceived += Form1_CustomMsgReceived;
}

private void Form1_CustomMsgReceived(object sender, EventArgs e)
{
    MessageBox.Show("C程序发来了自定义消息。");
}
我本身实际上不太喜欢c#,对里面具体的东西没什么兴趣,使用纯粹工作所迫以及一切旧情。 C#小白中的小白求助:C#如何实现自定义的windows消息的事件处理。