美文网首页
事件驱动

事件驱动

作者: 饭饭H | 来源:发表于2017-09-16 19:10 被阅读0次

所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户的操作. 事件驱动的核心自然是事件。从事件角度说,事件驱动程序的基本结构是由一个事件收集器、一个事件发送器和一个事件处理器组成。事件收集器专门负责收集所有事件,包括来自用户的(如鼠标、键盘事件等)、来自硬件的(如时钟事件等)和来自软件的(如操作系统、应用程序本身等)。事件发送器负责将收集器收集到的事件分发到目标对象中。事件处理器做具体的事件响应工作,它往往要到实现阶段才完全确定,因而需要运用虚函数机制(函数名往往取为类似于HandleMsg的一个名字)。对于框架的使用者来说,他们唯一能够看到的是事件处理器。这也是他们所关心的内容。

视图(即我们通常所说的“窗口”)是“事件驱动”应用程序的另一个要元。它是我们所说的事件发送器的目标对象。视图接受事件并能够对其进行处理。当我们将事件发送到具体的视图时,实际上我们完成了一个根本性的变化:从传统的流线型程序结构到事件触发方式的转变。这样应用程序具备相当的柔性,可以应付种种离散的、随机的事件。

由于Windows本身是基于“事件驱动”模型的。因而在Windows操作系统下实现应用程序框架有相当的便利。在事件驱动程序的基本单元中,事件收集器已经由Windows系统完成;事件发送器也已经由Windows完成了部分内容。之所以是部分而非完全是因为Windows是用C语言实现的,而不是C++。由于没有对象,Windows将事件发送到所谓的“窗口函数”中(尽管不是发送到具体的对象,但应该说这是面向对象方式实现的一个变体)。要感谢Windows做了这件事。确定事件的目标所要做的工作的复杂可能要超出我们的想象。

wxWidgets的中所有可以处理事件的类都继承自wxEvtHandler,其中包含frames,buttons,menus,even documents,所有的窗体类(即从wxWindow继承的类)和程序类(application class).

这些类可以有一个事件表,用来绑定事件和被调用的函数(handler functions).

过程 3.2. 建立一个静态事件表(即编译时生成的事件表)的操作步骤

建立一个新类(直接或间接从wxEvtHandler继承)

为每个要处理的事件声明被调用的函数

在被处理的事件所在的类的声明中加入宏DECLARE_EVENT_TABLE

在宏BEGIN_EVENT_TABLE... END_EVENT_TABLE(就是事件表)中将函数与枚举的数字绑定(因为产生该类型的事件的按钮不唯一,要用枚举数来区分);有些事件不必与枚举数绑定,因为产生该类型的事件的对象可以确定(比如就是this).

例 3.1. 一个事件表

BEGIN_EVENT_TABLE(MyFrame,wxFrame)

EVT_MENU (wxID_ABOUT,MyFrame::OnAbout)

EVT_MENU (wxID_EⅪT,MyFrame::OnQuit)

EVT_SIZE (MyFrame::OnSize)

//不必与枚举数绑定,因为产生该类型的事件的对象是this

EVT_BUTTON (wxID_OK,MyFrame::OnButtonOK)

END_EVENT_TABLE()

在事件中指定被绑定的数字,wxWidgets会将其映射到对应的函数,并调用函数

所有在事件表中被绑定的函数有相似的形式:返回值都是void,不是virtual函数,参数为wxCommandEvent类型

相关文章

  • 什么是回调

    程序可以分为两种:「非事件驱动」型程序、「事件驱动(event-driven)」型程序。 • 非事件驱动型程序 这...

  • 小研05:关于等保2.0市场空间测算的思考

    网络安全行业主要的驱动因素包括合规驱动、事件驱动、技术驱动、业务驱动,其中合规驱动和事件驱动在当前阶段影响最大。预...

  • 02.12事件绑定

    JS是事件驱动语言 1.事件三要素:事件源、事件、事件驱动程序 2.绑定事件a。 直接通过标签绑定事件-直接在事件...

  • 事件驱动模型

    观察者模式与事件驱动模型 观察者模式: 事件驱动模型 2.事件驱动模型 事件源 持有监听器列表,或者各种类型监听器...

  • 事件

    事件 1.事件驱动与数据驱动 用原生JavaScript事件驱动通常是这样的流程: 先通过特定的选择器查找到需要操...

  • 事件驱动

    所谓事件驱动,简单地说就是你点什么按钮(即产生什么事件),电脑执行什么操作(即调用什么函数).当然事件不仅限于用户...

  • 数据驱动 事件驱动

    事件驱动 由事件决定程序的流程

  • 2018-02-02

    Dom笔记第1章 事件1.1事件三要素事件源、事件、事件驱动程序。三句话:获取事件源、绑定事件、书写事件驱动程序。...

  • 浏览器事件模型

    什么是事件 我想你很可能听说过事件驱动, 但是事件驱动到底是什么?为什么说浏览器是事件驱动的呢?为什么 NodeJ...

  • js事件绑定

    1.事件三要素: 事件源、事件、事件驱动程序事件源发生指定的事件就完成事件驱动程序(谁谁谁发生什么就做什么)

网友评论

      本文标题:事件驱动

      本文链接:https://www.haomeiwen.com/subject/gkyxsxtx.html