5 个解决方案
#1
你都知道用WndProc来处理自定义消息了,那你想描述的相拥C#的时间处理方式处理这个消息是什么意思?
你意思是在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
对,想让别人容易理解点,特别是比我还菜的,符合这样的函数原型 void event_handler(object sender , EventArgs);别人只需要在这里面就可以操作了。怎么做到呢?比如处理C程序发过来的0x0453自定义消息。
#3
看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
下面是别人调用的方式,就不用管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
忘记登录这个了,谢谢啊,我用了、
#5
我本身实际上不太喜欢c#,对里面具体的东西没什么兴趣,使用纯粹工作所迫以及一切旧情。
#1
你都知道用WndProc来处理自定义消息了,那你想描述的相拥C#的时间处理方式处理这个消息是什么意思?
你意思是在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
对,想让别人容易理解点,特别是比我还菜的,符合这样的函数原型 void event_handler(object sender , EventArgs);别人只需要在这里面就可以操作了。怎么做到呢?比如处理C程序发过来的0x0453自定义消息。
#3
看来你也是刚接触C#,不过看得出你内功不错,我给你个原型你慢慢琢磨。
下面是别人调用的方式,就不用管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
忘记登录这个了,谢谢啊,我用了、
#5
我本身实际上不太喜欢c#,对里面具体的东西没什么兴趣,使用纯粹工作所迫以及一切旧情。