C#的消息处理方法

原创 2003年06月03日 22:41:00

    在C#中,程序采用了的驱动采用了事件驱动而不是原来的消息驱动,虽然.net框架提供的事件已经十分丰富,但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法,因此在C#中使用消息有时候还是大大提高编程的效率的。

  1 定义消息

   在c#中消息需要定义成windows系统中的原始的16进制数字,比如

    const int WM_Lbutton = 0x201; //定义了鼠标的左键点击消息

     public const int USER = 0x0400 // 是windows系统定义的用户消息

  2 消息发送

    消息发送是通过windows提供的API函数SendMessage来实现的它的原型定义为

  [DllImport("User32.dll",EntryPoint="SendMessage")]
      private static extern int SendMessage(
                   int hWnd,      // handle to destination window
                   int Msg,       // message
                   int wParam,  // first message parameter
                   int lParam // second message parameter
       );

3 消息的接受

  在C#中,任何一个窗口都有也消息的接收处理函数,就是defproc函数

你可以在form中重载该函数来处理消息

protected override void DefWndProc ( ref System.WinForms.Message m )
{
	switch(m.msg)
	{
	case WM_Lbutton :
		///string与MFC中的CString的Format函数的使用方法有所不同
		string message = string.Format("收到消息!参数为:{0},{1}",m.wParam,m.lParam);
		MessageBox.Show(message);///显示一个消息框
		break;
	default:
		base.DefWndProc(ref m);///调用基类函数处理非自定义消息。
		break;
	}
}
其实,C#中的事件也是通过封装系统消息来实现的,如果你在DefWndProc函数中不处理该
那么,他会交给系统来处理该消息,系统便会通过代理来实现鼠标单击的处理函数,因此你可以通过
defproc函数来拦截消息,比如你想拦截某个按钮的单击消息
4 C#中其他的消息处理方法
   在C#中有的时候需要对控件的消息进行预处理,比如你用owc的spreedsheet控件来处理Excel文件,你不想让用户可以随便选中
数据进行编辑,你就可以屏蔽掉鼠标事件,这个时候就必须拦截系统预先定义好的事件(这在MFC中称为子类化),你可以通过C#提供的一个接口
IMessageFilter来实现消息的过滤
public class Form1: System.Windows.Forms.Form,IMessageFilter
{
  const int WM_MOUSEMOVE = 0x200 
  public bool PreFilterMessage(ref Message m)
  {
   Keys keyCode = (Keys)(int)m.WParam & Keys.KeyCode;
   if(m.Msg == m.Msg==WM_MOUSEMOVE)
    //||m.Msg == WM_LBUTTONDOWN
   {
    //MessageBox.Show("Ignoring Escape...");
    return true;
   }
   return false;
  }
} 

C#的消息处理方法

  • zgqtxwd
  • zgqtxwd
  • 2008年04月24日 11:57
  • 76

C#的消息处理方法

   在C#中,程序采用了的驱动采用了事件驱动而不是原来的消息驱动,虽然.net框架提供的事件已经十分丰富,但是在以前的系统中定义了丰富的消息对系统的编程提供了方便的实现方法,因此在C#中使用消息有时...
  • mydriverc
  • mydriverc
  • 2007年07月12日 13:40
  • 504

避免MessageBox带来的消息函数重入问题

尽量避免在 非输入响应的消息处理函数里使用MessageBox,以免消息处理函数发生重入现象。最近在自定义消息的处理函数中使用MessageBox的时候发现出现重入现象。google了一下发现下面这篇...
  • dj0379
  • dj0379
  • 2010年04月02日 17:16
  • 1995

C#中几种常用的处理字符串的方法总结

主要有以下几种: string[i]所获得的元素是只读的。 string.ToCharArray() (把string获得一个可写的字符数组) string.Replace(old,...
  • pengpegV5yaya
  • pengpegV5yaya
  • 2016年03月01日 09:53
  • 1212

c# 中如何定义和接收消息

在C#中目前我还没有找到发送消息的类成员函数,所以只能采用通过调用WIN 32 API 的 SendMessage() 函数实现。由于 SendMessage的参数中需要得到窗体的句柄(handler...
  • 21aspnet
  • 21aspnet
  • 2007年03月24日 13:56
  • 2065

C# 窗口消息传递

与MFC类似,通过SendMessage和窗口句柄实现消息之间的传递 当然,这东西可以在线程和进程间通讯,实现线程消息的互相传递,文件系统升级卸载等功能 作用空间 using System.Run...
  • b510030
  • b510030
  • 2016年09月27日 10:45
  • 710

C# 复习笔记 消息与事件处理

C# 复习笔记 消息与事件处理学习Windows编程后,有时候需要对系统消息或者事件做出自己的响应或者说自己拦截一些消息,实现某个事件或者函数的触发,这时就需要对系统消息进行处理. 大多数直接开始学...
  • baidu_31981559
  • baidu_31981559
  • 2016年05月30日 15:25
  • 1437

C#简单实现自定义消息的发送和接收

//=================================发送窗口代码=============================using System;using System.Coll...
  • xiunai78
  • xiunai78
  • 2009年07月07日 10:53
  • 7242

C# WinForm 消息大全

不要以为下面的东西只有C++中才会用到哦! 消息,就是指Windows发出的一个通知,告诉应用程序某个事情发生了。例如,单击鼠标、改变窗口尺寸、按下键盘上的一个键都会使Windows发送一个消息给...
  • u011970435
  • u011970435
  • 2015年06月19日 11:52
  • 639

C#选择结构(判断与循环)

C#是一种新的面向对象的我
  • fsqrocket
  • fsqrocket
  • 2014年11月19日 20:30
  • 445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#的消息处理方法
举报原因:
原因补充:

(最多只允许输入30个字)