常用事件与自定义事件的区别是,它们由类 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_SYSKEYDOWN 或 WM_KEYDOWN 消息时触发。事件映射条目:EVENT_STOCK_KEYDOWN( ) |
KeyPress | void FireKeyPress( short*pnChar ) |
收到 WM_CHAR 消息时触发。事件映射条目:EVENT_STOCK_KEYPRESS( ) |
KeyUp | void FireKeyUp( shortnChar , shortnShiftState ) |
收到 WM_SYSKEYUP 或 WM_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
加载控件的项目。
在类视图中,右键单击 ActiveX 控件类打开快捷菜单。
在快捷菜单中,依次单击“添加”和“添加事件”。
这会打开添加事件向导。
在“事件名称”下拉列表中,选择
KeyPress
。单击“完成” 。
针对常见事件的添加事件向导变更
常见事件由控件的基类进行处理,因此添加事件向导不会以任何方式更改你的类声明。 它会将事件添加到控件的事件映射中,并在其 .IDL 文件中创建一个条目。 以下行会添加到控件的事件映射中,它位于控件类事件文件 (.CPP) 中:
EVENT_STOCK_KEYPRESS()
当收到 WM_CHAR 消息且控件处于活动状态时,添加此代码会触发 KeyPress 事件。 在其他时间,可通过从控件代码内调用触发函数(例如 FireKeyPress
)来触发 KeyPress 事件。
添加事件向导会将以下代码行添加到控件的 .IDL 文件中:
[id(DISPID_KEYPRESS)] void KeyPress(SHORT* KeyAscii);
此行会将 KeyPress 事件与其标准调度 ID 相关联,并允许容器预测 KeyPress 事件。