当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > C#中使用SendMessage

ASP.NET
ASP.NET开发:简化应用程序的开发支持Web标准
asp.net XMLHttpRequest实现用户注册前的验证
asp.net 页面间传值方法小结
asp.net url重写浅谈
asp.net 验证码生成和刷新及验证
C#精髓 GridView72大绝技 学习gridview的朋友必看
实例说明asp.net中的简单角色权限控制
asp.net网站开发包wq.dll打包下载
js与ASP.NET 中文乱码问题
asp.net checkbox 动态绑定id GridView删除提示
asp.net TextBox回车触发事件 图片在img显示
asp.net 脏字典过滤问题 用正则表达式来过滤脏数据
asp.NET 脏字过滤算法
asp.NET 脏字过滤算法 修改版
asp.net sql 数据库处理函数命令
asp.net Javascript 的几种写法与提示
ASP.NET MVC学习笔记
asp.net 中国身份证号码验证代码 非正则
Asp.net中使用Sqlite数据库的方法
asp.net 中文字符串提交乱码的解决方法

ASP.NET 中的 C#中使用SendMessage


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 249 ::
收藏到网摘: n/a

在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; 

 }

}