zoukankan      html  css  js  c++  java
  • C#委托、事件、消息(入门级)(再续)

      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

  • 相关阅读:
    遭遇:“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误
    JS控制form表单action去向
    easyui form 提交问题,纠结了很久,有点诡异
    easyui的tab加载页面中的form重复提交
    AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
    $.AJAX参数提交及后台获取方式
    多条件判断语句case
    条件判断语句if
    条件测试和捕获信号
    向脚本传递参数
  • 原文地址:https://www.cnblogs.com/Johness/p/2432228.html
Copyright © 2011-2022 走看看