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

ASP.NET
asp.net Server.MapPath方法注意事项
asp.net下常用的加密算法MD5、SHA-1应用代码
几个 ASP.NET 小技巧
ASP.NET内置对象之Application对象
ASP.NET使用正则表达式屏蔽垃圾信息
asp.net“服务器应用程序不可用” 解决方法
asp.net Linq把数据导出到Excel的代码
asp.net ext treepanel 动态加载XML的实现方法
silverlight2.0Beta版TextBox输入中文解决方法
asp.net转出json格式客户端显示时间
asp.net下Linq To Sql注意事项小结
ASP.NET动态加载用户控件的实现方法
asp.net web大文件上传带进度条实例代码
asp.net DZ论坛中根据IP地址取得所在地的代码
向asp.Net进发 数据库连接操作
.net 上传文件前所未有的简单
asp.net gridview代码绑定
asp.net中List的使用方法
Asp.net(C#)实现验证码功能代码
asp.NET开发中正则表达式中BUG分析

ASP.NET 中的 C#中使用SendMessage


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 252 ::
收藏到网摘: 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; 

 }

}