科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件在C#应用程序与DLL交互中使用消息

在C#应用程序与DLL交互中使用消息

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

在C#是一种类似 Java 的完全面向对象的高级编程语言,其处理过程采用事件驱动方式

作者:sundy26 来源:论坛 2007年11月13日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
示例应用

  1、定义消息

  我们在工程中添加一个Message类用来定义消息。然后添加了三个成员变量,其中USER为自定义消息的初始值,相当与MFC中的WM_USER。WM_TEST为自定义的用来响应应用程序的消息,WM_MSG为自定义的用来响应DLL传递过来的消息。如何在DLL定义消息请参考文章:VC.Net从DLL传递消息到DLL。

public class Message
{
 public const int USER = 0x0400;
 //as mfc Define WM_TEST WM_USER + 101
 public const int WM_TEST = USER+101;
 public const int WM_MSG = USER+102;
}

  2、声明引用函数

  在使用消息的地方,申明引用的函数,我们这里在MsgForm.cs文件中申明:

//申明发送消息函数
[DllImport("User32.dll",EntryPoint="SendMessage")]
private static extern int SendMessage(
IntPtr hWnd, // handle to destination window
uint Msg, // message
uint wParam, // first message parameter
uint lParam // second message parameter
);

//申明DLL中启动消息函数
[DllImport("MessageDLL.dll",EntryPoint="StartSendMessage")]
private extern static void StartSendMessage(IntPtr hWnd);

  3、处理系统消息

protected override void OnPaint ( System.Windows.Forms.PaintEventArgs e )
{
 ///定义字体:黑体,大小:28
 Font font = new Font("黑体",28);
 ///创建蓝色画笔
 SolidBrush bluepen = new SolidBrush(Color.Blue);
 ///创建黑色画笔
 SolidBrush blackpen = new SolidBrush(Color.FromArgb(0xa0,0xa0,0xb0));
 ///写字符串
 e.Graphics.DrawString("VC知识库",font,blackpen,65,25);
 ///偏移4个象素用不同的颜色再写一次,达到立体效果
 e.Graphics.DrawString("VC知识库",font,bluepen,61,21);
}

  4、 触发自定义消息


//测试应用程序消息
private void TestAppbutton_Click(object sender, System.EventArgs e)
{
 SendMessage(this.Handle,Message.WM_TEST,100,200);
}
//测试DLL消息
private void TestDLLbutton_Click(object sender, System.EventArgs e)
{
 StartSendMessage(this.Handle);
}

  5、响应和处理自定义消息

protected override void DefWndProc ( ref System.Windows.Forms.Message m )
{
 string message;
 switch(m.Msg)
 {
  case Message.WM_TEST://处理消息
   message = string.Format("收到从应用程序发出的消息!参数为:{0},{1}",m.WParam,m.LParam);
   MessageBox.Show(message);///显示一个消息框
   break;
  case Message.WM_MSG:
   message = string.Format("收到从DLL发出的消息!参数为:{0},{1}",m.WParam,m.LParam);
   MessageBox.Show(message);///显示一个消息框
   break;
  default:
   base.DefWndProc(ref m);//调用基类函数处理非自定义消息。
   break;
 }
}

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章