zoukankan      html  css  js  c++  java
  • vs2017开发ActiveX(主讲OCX)(五)、事件

    事件


    ActiveX控件使用事件来通知容器控件发生了什么。事件的常见示例包括控件的点击,使用键盘输入的数据以及控件状态的更改。发生这些操作时,控件将触发事件以警告容器。

    事件也称为消息。

    ActiveX 控件使用事件来通知发生到控件的容器。 事件的常见示例包括单击在控件上,输入在控件的状态中使用键盘和更改的数据。 这些操作发生时,该控件触发事件以提醒容器。
    事件也称为消息。
    MFC 支持两种类型的事件: 常用和自定义。 常用事件是事件的类COleControl会自动处理。 常用事件的完整列表,请参阅文章MFC ActiveX 控件:添加常用事件。 自定义事件使控件能够在特定于该控件的操作发生时通知该容器。 一些示例是一个控件的内部状态或在某些窗口消息接收更改。
    为您正确地引发事件的控制,你的控件类必须映射到相关的事件发生时,应调用的成员函数的控件的每个事件。 此映射机制 (称为事件映射) 集中了有关事件的信息,并允许 Visual Studio 轻松访问和操作该控件的事件。 下面的宏,位于标头中声明此事件映射 (.H) 文件的控件类声明:

    DECLARE_EVENT_MAP()
    

    声明事件映射后,它必须在定义控件的实现 (.CPP) 文件。 以下代码行定义事件映射,从而允许您控制触发特定事件:

    BEGIN_EVENT_MAP(CCreateOcxDemoCtrl, COleControl)
    END_EVENT_MAP()
    

    如果您使用 MFC ActiveX 控件向导创建项目,它会自动添加这些行。 如果不使用 MFC ActiveX 控件向导,则必须手动添加这些行。
    类视图,则你可以添加类支持的常用事件COleControl或你定义的自定义事件。 对于每个新的事件,类视图会自动将相应的条目添加到控件的事件映射和控件的。IDL 文件。
    下面讨论了事件的详细信息:

    MFC ActiveX 控件:添加常用事件

    常用事件不同于自定义事件,它们会自动触发由类COleControl。 COleControl 包含引发事件导致的常见操作的预定义的成员函数。 由实现的一些常见操作COleControl包括单-和当时的 clicks 控件、 键盘事件和更改鼠标按钮的状态。 条件映射常用事件始终使用 EVENT_STOCK 前缀开头。

    常用事件支持通过向导添加

    COleControl类提供了下表中列出的十个常用事件。你可以通过事件添加向导在你的控件中添加你想使用的事件。
    常用事件

    事件名称 触发函数 注释
    Click void FireClick( ) 触发时控制捕获鼠标,任何BUTTONUP接收 (左侧、 中间或右侧) 消息,并在控件上释放该按钮。 此事件之前发生的常用鼠标按下和 MouseUp 事件。事件映射条目:EVENT_STOCK_CLICK( )
    DblClick void FireDblClick( ) 当接收到BUTTONDBLCLK消息,类似于单击事件。事件映射条目:EVENT_STOCK_DBLCLICK( )
    Error void FireError( SCODE scode , LPCSTR lpszDescription , UINT nHelpID = 0 ) 当将范围之外的方法调用或属性访问 ActiveX 控件中发生错误时引发。事件映射条目: EVENT_STOCK_ERROREVENT( )
    KeyDown void FireKeyDown( short nChar , short nShiftState ) 当收到WM_SYSKEYDOWN或WM_KEYDOWN消息时触发。事件映射条目:EVENT_STOCK_KEYDOWN( )
    KeyPress void FireKeyPress( short * pnChar ) 当接收到WM_CHAR消息时触发。事件映射条目:EVENT_STOCK_KEYPRESS( )
    KeyUp void FireKeyUp( short nChar , short nShiftState ) 当接收到WM_SYSKEYUP或WM_KEYUP消息触发。事件映射条目:EVENT_STOCK_KEYUP( )
    MouseDown void FireMouseDown( short nButton , short nShiftState , float x , float y ) 接收到任何BUTTONDOWN (左侧、 中间或右侧)消息。 鼠标将在事件触发前捕获此事件。事件映射条目:EVENT_STOCK_MOUSEDOWN( )
    MouseMove void FireMouseMove( short nButton , short nShiftState , float x , float y ) 当收到 WM_MOUSEMOVE 消息时触发。事件映射条目:EVENT_STOCK_MOUSEMOVE( )
    MouseUp void FireMouseUp( short nButton , short nShiftState , float x , float y ) 收到任何BUTTONUP (左侧、 中间或右侧)消息时。 鼠标将在触发前捕获此事件。事件映射条目:EVENT_STOCK_MOUSEUP( )
    ReadyStateChange void FireReadyStateChange( ) 基于在收到一定数量数据后转换为下一个就绪状态时触发。事件映射条目:EVENT_STOCK_READYSTATECHANGE( )

    使用添加事件向导添加常用事件

    添加常用事件比添加自定义事件需要更少的工作,因为实际事件的触发由基类COleControl自动处理。 以下过程使用开发的控件添加常用事件MFC ActiveX 控件向导。 调用 KeyPress 事件时触发,按下某个键并在控件处于活动状态。 此过程还用于添加其他常用事件。 替换 KeyPress 的所选的常用事件名称。

    使用添加事件向导添加KeyPress常用事件

    • 加载控件的项目。
    • 在类视图中,右键单击你的 ActiveX 控件类以打开快捷菜单。
    • 从快捷菜单中,单击添加,然后单击添加事件。
    • 这将打开添加事件向导。
      添加事件
    • 在事件名称下拉列表中,选择KeyPress。
      选择KeyPress
    • 单击 “完成”。

    在添加事件向导中更改常用事件

    因为常用事件处理由控件的基类,添加事件向导不会更改以任何方式在类声明。 它将事件添加到控件的事件映射,并使将项记入它.IDL 文件。 将以下行添加到控件的事件映射,位于控件类实现 (.CPP) 文件:

    EVENT_STOCK_KEYPRESS()
    

    cpp
    添加此代码会触发 KeyPress 事件时接收到 WM_CHAR 消息和控件处于活动状态。 通过调用其触发函数,可以在其他时间触发 KeyPress 事件 (例如, FireKeyPress) 从在控件代码内。
    添加事件向导将以下代码行添加到控件的.IDL 文件:

    [id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);
    

    idl
    此行将按键事件与标准的调度 ID 相关联,并允许以应对预期的 KeyPress 事件的容器。

    MFC ActiveX 控件:添加自定义事件

    由于时间关系,添加自定义事件我们放在下一篇来说。

  • 相关阅读:
    CSOL大灾变移植记录
    游戏设计技巧——对象信息封装
    Filament初探,全场景性能测试
    Godot从编辑器创建自定义场景类型对象
    Python中面向对象编程和内置方法的使用解析【转】
    python中使用xlrd、xlwt操作excel表格详解【转】
    Python第三方库xlrd/xlwt的安装与读写Excel表格【转】
    python实现以及所有排序大总结【转】
    Python下异常、模块、文件、数据储存-json等知识讲解【转】
    python文件系统详细介绍【转】
  • 原文地址:https://www.cnblogs.com/SunkingYang/p/11049277.html
Copyright © 2011-2022 走看看