博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#委托、事件、消息(入门级)(再续)
阅读量:7255 次
发布时间:2019-06-29

本文共 1719 字,大约阅读时间需要 5 分钟。

  Windows操作系统是图形界面的,而这是由于信息队列机制的功劳。

  通常我们说的消息,很多是广义的概念,我们把对象之间的通信称作消息交互。通过消息,对象之前建立起联系。

  那么我们WinForm程序中的消息是指什么呢?我们说:WinForm程序中的消息,很多时候是指操作系统向WinForm窗体(这里说得不是很对,但是先这样理解没有问题)发送的消息,告诉它某一个事件发生了。比如鼠标点击,我们是不可能知道、窗体本身也不会知道鼠标被点击,但操作系统知道鼠标被点击了,它会发送消息到窗体告诉它:鼠标被点击了,你应该做出反应了。

  当消息被窗体拿到之后,窗体会处理。比如鼠标被点击了,操作系统通过发消息的形式告诉窗体 ,窗体就调用了鼠标点击事件,事件会调用我们为它绑定的方法,我们的预期效果就达到了。

  理解起来其实不难,那么我们就消息的产生、发送及处理三个阶段来说明一下

  由于我们是入门级的讲解,我就简单地提一下。

  ①消息的产生:大家都知道,机器是不会模式思考的,但是操作系统之所以能够明白我们点击了鼠标,敲击了键盘,那么估计(我的猜想)应该是凭借电流的断续神马。当然,这一点我们又没办法做到……

  消息有很多种,每一种对应一个操作,比如点击鼠标、敲击键盘…… 

  ②消息的发送。

  消息产生之后,系统会将其封装,大家都知道,封装之后就成为了一个对象

namespace System.Windows.Forms {
// 消息类 public struct Message {
// …… // 摘要: // 获取或设置消息的窗口句柄。 // // 返回结果: // 消息的窗口句柄。 public IntPtr HWnd { get; set; } // // 摘要: // 指定消息的 System.Windows.Forms.Message.LParam 字段。 // // 返回结果: // 消息的 System.Windows.Forms.Message.LParam 字段。 public IntPtr LParam { get; set; } // // 摘要: // 获取或设置消息的 ID 号。 // // 返回结果: // 消息的 ID 号。 public int Msg { get; set; } // // 摘要: // 指定为响应消息处理而向 Windows 返回的值。 // // 返回结果: // 消息的返回值。 public IntPtr Result { get; set; } // // 摘要: // 获取或设置消息的 System.Windows.Forms.Message.WParam 字段。 // // 返回结果: // 消息的 System.Windows.Forms.Message.WParam 字段。 public IntPtr WParam { get; set; } // …… public override string ToString(); } }

  以上是C#封装的窗体消息类,我省略了一些属性和方法。

  经过封装的消息到了C#语言处有四个属性:窗体句柄,消息编号,参数1,参数2。

  句柄很好理解,就是窗体的编号(动态且唯一)。消息编号是……就是消息编号,16进制数据。参数里面一般有可能拿到鼠标的坐标。

  Windows操作系统通过窗口句柄将消息发送到对应窗体。所有信息被操作系统维护到一个消息队列中,并被操作系统分发。

  ③消息的处理。

  我们来看看WinForm窗体拿到消息时进行怎样的处理。首先会有一个方法最先拿到消息进行判断,然后该方法会通过消息的类型来引发不同的事件。

 

  我们是基础性的说一下消息,对于消息的发送和拦截,以及自定义的消息及消息队列是以后再探讨。

  2012-04-04 19:03:39

转载地址:http://ykkdm.baihongyu.com/

你可能感兴趣的文章
4、jeecg 笔记之 自定义显示按钮 (exp 属性)
查看>>
大白话5分钟带你走进人工智能-第二十八节集成学习之随机森林概念介绍(1)
查看>>
ASPNET MVC Error 403.14
查看>>
redis学习笔记
查看>>
排球计分规则
查看>>
xml解析
查看>>
android分析之Condition
查看>>
创建单例的两种方法
查看>>
Mac上在github 搭建 octopress
查看>>
Elasticsearch增、删、改、查操作深入详解
查看>>
Cocos2d-x内存自动释放机制--透彻篇
查看>>
模板方法模式
查看>>
[mybatis]Example的用法
查看>>
3D跑酷遇到的问题
查看>>
putty 、xshell的使用 和 putty 、xshell、 shell 间免密登陆
查看>>
项目管理之怒目相争,外行能不能领导内行做软件开发?
查看>>
扬帆起航,再踏征程(四)
查看>>
Objective-C基础笔记(2)@property和@synthesize
查看>>
Android系统开发(1)——GCC编译器的编译和安装过程
查看>>
详解Python模块导入方法
查看>>