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 控件:添加自定义事件

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

posted @ 2019-06-18 17:53  SunkingYang  阅读(1464)  评论(0编辑  收藏  举报