MFC ActiveX 控件:向 ActiveX 控件添加常用事件

常用事件与自定义事件的区别是,它们由类 COleControl 自动触发。 COleControl 包含预定义的成员函数,这些函数可引发由常见操作生成的事件。 由 COleControl 实现的一些常见操作包括单击和双击控件、键盘事件以及鼠标按钮状态更改。 常见事件的事件映射条目的前面始终采用 EVENT_STOCK 前缀。

添加事件向导支持的常见事件

COleControl 类提供 10 种常见事件,它们在下表中列出。 可使用添加事件向导在控件中指定所需的事件。

常用事件

事件 触发函数 注释
单击 void FireClick( ) 当控件捕获鼠标、收到任何 BUTTONUP(向左、中间或向右)消息,以及在控件上释放按钮时会触发。 在此事件之前发生常见的 MouseDown 和 MouseUp 事件。

事件映射条目:EVENT_STOCK_CLICK( )
DblClick void FireDblClick( ) 与 Click 类似,但在收到 BUTTONDBLCLK 消息时触发。

事件映射条目:EVENT_STOCK_DBLCLICK( )
错误 void FireError( SCODEscode, LPCSTRlpszDescription, UINTnHelpID= 0 ) 当方法调用或属性访问范围之外的 ActiveX 控件中发生错误时触发。

事件映射条目:EVENT_STOCK_ERROREVENT( )
KeyDown void FireKeyDown( shortnChar, shortnShiftState) 收到 WM_SYSKEYDOWNWM_KEYDOWN 消息时触发。

事件映射条目:EVENT_STOCK_KEYDOWN( )
KeyPress void FireKeyPress( short*pnChar) 收到 WM_CHAR 消息时触发。

事件映射条目:EVENT_STOCK_KEYPRESS( )
KeyUp void FireKeyUp( shortnChar, shortnShiftState) 收到 WM_SYSKEYUPWM_KEYUP 消息时触发。

事件映射条目:EVENT_STOCK_KEYUP( )
MouseDown void FireMouseDown( shortnButton, shortnShiftState, floatx, floaty) 在收到任何 BUTTONDOWN(向左、中间或向右)时触发。 捕获到鼠标后立即触发此事件。

事件映射条目:EVENT_STOCK_MOUSEDOWN( )
MouseMove void FireMouseMove( shortnButton, shortnShiftState, floatx, floaty) 收到 WM_MOUSEMOVE 消息时触发。

事件映射条目:EVENT_STOCK_MOUSEMOVE( )
MouseUp void FireMouseUp( shortnButton, shortnShiftState, floatx, floaty) 在收到任何 BUTTONUP(向左、中间或向右)时触发。 在释放鼠标捕获后触发此事件。

事件映射条目:EVENT_STOCK_MOUSEUP( )
ReadyStateChange void FireReadyStateChange( ) 在控件由于收到的数据量而过渡到下一就绪状态时触发。

事件映射条目:EVENT_STOCK_READYSTATECHANGE( )

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

与添加自定义事件相比,添加常见事件更加简单,因为对实际事件的触发由基类 COleControl 自动处理。 以下过程会将常见事件添加到使用 MFC ActiveX 控件向导开发的控件。 在按下键且控件处于活动状态时触发名为 KeyPress 的事件。 此过程还可用于添加其他常见事件。 将所选常见事件名称替换为 KeyPress。

若要使用添加事件向导添加常见事件 KeyPress

  1. 加载控件的项目。

  2. 在类视图中,右键单击 ActiveX 控件类打开快捷菜单。

  3. 在快捷菜单中,依次单击“添加”和“添加事件”。

    这会打开添加事件向导。

  4. 在“事件名称”下拉列表中,选择 KeyPress

  5. 单击“完成” 。

针对常见事件的添加事件向导变更

常见事件由控件的基类进行处理,因此添加事件向导不会以任何方式更改你的类声明。 它会将事件添加到控件的事件映射中,并在其 .IDL 文件中创建一个条目。 以下行会添加到控件的事件映射中,它位于控件类事件文件 (.CPP) 中:

EVENT_STOCK_KEYPRESS()

当收到 WM_CHAR 消息且控件处于活动状态时,添加此代码会触发 KeyPress 事件。 在其他时间,可通过从控件代码内调用触发函数(例如 FireKeyPress)来触发 KeyPress 事件。

添加事件向导会将以下代码行添加到控件的 .IDL 文件中:

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

此行会将 KeyPress 事件与其标准调度 ID 相关联,并允许容器预测 KeyPress 事件。

另请参阅

MFC ActiveX 控件
MFC ActiveX 控件:方法
COleControl 类