您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:92 来源:vckbase.com

本文章共2988字,分2页,当前第1页,快速翻页:
 

如何在C#应用程序和DLL中使用消息

作者:sundy26

  在C#是一种类似 Java 的完全面向对象的高级编程语言,其处理过程采用事件驱动方式,但在实际的使用过程中,有时候通过调用系统原有的消息处理起来会更简单,特别是在处理与DLL文件的交互时,实践证明的确是非常方便的。
逆风编程精品

在C#中使用自定义消息

  在C#中使用自定义消息非常简单,只需要下面几个简单的步骤就可以了:

1、定义消息
  定义消息的方法与在VC中定义消息有一点点不同,比如在VC中申明一个自定义消息是这样的:

#define WM_TEST WM_USER   101

而在C#中消息需要定义成 Windows 系统中的原始的16进制数字,比如自定义消息

public const int USER = 0x0400;

那么我们在VC中申明的自定义消息,在C#中就可以做对应的声明:

public const int WM_TEST = USER 101;

2、发送消息
  消息发送是通过 Windows 提供的 API 函数 SendMessage 来实现的,它的原型定义:

[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

);      
3、消息接收
  消息发出之后,在Form中如何接收呢?我们可以重载DefWinproc函数来接收消息。
protected override void DefWndProc ( ref System.Windows.Forms.Message m )

{

            switch(m.Msg)

            { 

                case Message.WM_TEST: //处理消息

                break;

                default:

                base.DefWndProc(ref m);//调用基类函数处理非自定义消息。

		break;

            }

}  
在C#中使用系统消息

  我们以WM_PAINT消息的处理为例,在C#中处理消息与MFC的消息处理是类似的,但更为简单。MFC中需要使用DECLARE_MESSAGE_MAP来定义消息映射,在C#就不需要了。比如WM_PAINT消息,我们只要重载父类中的OnPaint虚拟方法即可,方法如下:
  在菜单View->Other Windows->Object Browser打开对象浏览窗口(或用CTRL ALT J打开),在我们的工程名下找到Form并选中,这时在右边的窗口列出所有Form类的成员函数。
  我们选中OnPaint(System.WinForms.PaintEventArgs)此时在下面会显示完整的OnPaint函数protected void OnPaint ( System.WinForms.PaintEventArgs e )我们将这一行字符串Copy下来。打开Form1.cs进行代码编辑,我们把刚才拷贝下来的函数定义复制到Form1类里面,并加上override关键字,此时我们便可以在里面添加我们的消息处理代码了,请参考如下代码段:
protected override void OnPaint (System.Windows.Forms.PaintEventArgs e  ) 

{

     Font font = new Font("黑体",28);///定义字体:黑体,大小: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);}
示例应用

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

连接 COM 与 .NET 的桥梁(三)——COM 服务
Windows 文件过滤驱动经验总结
一个基于MFC的XML封装类 CXml
Windows快捷方式文件格式解析
关于托盘的一点总结
创建客户区窗口,列表框之间项的拖拽操作
视频采集
通过异步程序调用(APC)实现的定时功能
乱砍设计模式之零
使用MFC的数组类
推荐一个简单的托盘类
内存优化之道:托管代码的失传内存优化技术
MFC架构下的DirectX8
C QA 专栏:列表视图模式,SetForeground
C# 2.0匿名方法揭密
动态真彩工具栏
实现类似Excel和Visual C 里文件夹式样的标
TIF格式图像文件初探
子类化:增强Edit控件为日期输入控件
如何限制PC机上网

相关评论


本文章所属分类:首页 VC++

  热门关键字: