网络编程
位置:首页>> 网络编程>> ASP.NET>> C#中使用SendMessage

C#中使用SendMessage

  发布时间:2023-07-14 19:12:37 

标签:C中,中使,使用,用S,Se,en,nd,dM,Me,es,ss,sa,ag,ge,e

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

}

}

0
投稿

猜你喜欢

  • 最近使用工作需要,使用了Navicat8.2版本,发现备份数据都是默认存储在C盘,这个就比较郁闷了。重做系统忘记转移了。那不就死定了?找了一
  • 在网络设计领域关于Eye-Tracking的研究十分火爆,但是如何把这些研究结果转变为具体可行的设计来运作依旧是个难点。以下就是一些来自于E
  • function createobj() { if (window.ActiveXObject)&n
  • 最近做了wap站中的搜索结果页的改版,记录一下关于锚点链接的心得~关于锚点链接锚点链接一般用于比较长的网页,使用内部链接建立页内目录。单击目
  • 这几天做了一个专题,放到服务器后发现从首页链接到专题页面正常,但是从专题页面跳转到首页就会出现乱码。很是蹊跷,专题页面和首页没有共同的文件,
  • SQL Server 2000 清理日志精品教程SQL Server 2000 数据库日志太大!如何清理SQL Server 2000的日志
  • 看看下面的w3 upload组件例子,很简单: upload.asp<html> <head> 
  • 很神奇的一个晚上,居然在以前老同事的群里跟同事讨论起CSS的东西来了,不过很意外的还是有收获。在IE中常常会碰到如果将容器定位后,出现容器内
  • 查看表空间的名称及大小代码如下:SQL>select t.tablespace_name, round(sum(bytes/(1024
  • 为数据库配置比较大的内存,可以有效提高数据库性能。因为数据库在运行过程中,会在内存中划出一块区域来作为数据缓存。通常情况下,用户访问数据库时
  • 又发现一个IE不标准的地方,unshift方法会返回新数组的长度,但IE6与IE7则返回undefined。var a = [3,2,1,4
  • 在SQL中,很多威力都来自于将几个表或查询中的信息联接起来,并将结果显示为单个逻辑记录集的能力。在这种联接中包括INNER、LEFT、RIG
  • 在开发数据库应用中,经常会遇到处理时间的问题,如查询指定时间的记录等。下面就这些常见的问题,结合自己的一些经验,和大家探讨一下这类问题。首先
  • 大概在2004年初的时候,我第一次买了一本很厚的书,名字或许叫《Dreamweaver MX从入门到精通》,很认真看着书并实践操作大约三分之
  • Yoho, 大家好,又是我哟~ 首先抱歉让大家等了这么多时间。最近实在比较繁忙啦。不过我还是会尽量抽空出来给大家讲点有的没的,欢迎大家继续
  • 用比较笨的方法来做abc ="AlkjA;lkjlkjAlkAkjAlkjAAAA" if instr(abc,&quo
  • 由于某些原因需要把函数直接放到 img 标签上的 onload 属性执行,比如:For some reasons we have to ex
  • 现在很多地方都需要用到关键词过滤功能。比如一般的服务器都不允许一些词出现在网页上,站长有时候会对在本网站发布信息的内容进行一个广告过滤等。雨
  • 要是XHTML与CSS能面向对象。。太阳应该从北边升起了。但是,凡事都应该带着OO的思想来看问题,也勉强可以凑数拉。其实,早在零几年就有人提
  • 首先获取ip:<%    userip=Request.ServerVariables(&qu
手机版 网络编程 asp之家 www.aspxhome.com