MFC ActiveX 控件:添加自定义事件
2016-02-15 17:43
246 查看
EVENT_CUSTOM 宏表示。下一节实现用“ActiveX 控件向导”创建的 ActiveX 控件项目的自定义事件。
使用“添加事件向导”添加 ClickIn 自定义事件
加载控件的项目。
在“类视图”中,右击 ActiveX 控件类以打开快捷菜单。
在快捷菜单中,单击“添加”,然后单击“添加事件”。
此操作将打开“添加事件向导”。
在“事件名称”框中,键入“ClickIn”。
在“内部名称”框中,键入事件的引发函数名。在本例中,使用“添加事件向导”提供的默认值 (
使用 Parameter Name 和 Parameter Type 控件,添加称为
添加另一个称为
类型)的参数。
单击“完成”按钮创建事件。
下列代码行被添加到控件类的头 (.H) 文件:
复制
此代码声明了一个称为
COleControl::FireEvent。
另外,下列代码行被添加到控件的事件映射,此事件映射位于控件类的实现 (.CPP) 文件中:
复制
此代码将 ClickIn 事件映射到内联函数
最后,下列代码被添加到控件的 .IDL 文件:
复制
这行代码根据 ClickIn 事件在“添加事件向导”事件列表中的位置,为该事件分配一个特定的 ID 号。事件列表中的项使容器得以预测该事件。例如,它可能提供在引发事件时执行的处理程序代码。
WM_LBUTTONDOWN 消息处理程序中的
WM_LBUTTONDOW 处理程序。
使用“添加事件向导”添加消息处理程序
加载控件的项目。
在“类视图”中,选择 ActiveX 控件类。
在“属性”窗口中,单击“消息”按钮。
“属性”窗口显示可由 ActiveX 控件处理的消息列表。任何以粗体显示的消息都有一个分配的处理函数。
在“属性”窗口中,选择要处理的消息。在本例中,选择“WM_LBUTTONDOWN”。
从右边的下拉列表框中,选择“<添加> OnLButtonDown”。
在“类视图”中双击新的处理函数,跳转到 ActiveX 控件的实现 (.CPP) 文件中的消息处理程序代码。
下面的代码示例在每次在控件窗口中单击鼠标左键时调用 InCircle 函数。该示例可在
Circ 示例摘要中的 WM_LBUTTONDOWN 处理函数 OnLButtonDown 中找到。
复制
注意 当“添加事件向导”创建鼠标按钮操作的消息处理程序时,将自动添加对基类的相同消息处理程序的调用。不要移除此调用。如果控件使用任何常用鼠标消息,则必须调用基类中的消息处理程序,以确保正确地处理鼠标捕获。
在下例中,仅当在控件中的圆形或椭圆形区域内发生单击操作时才引发事件。若要实现此行为,可以将
复制
还需要将下列
复制
下列过程添加自定义 Click 事件。
添加使用常用事件名的自定义事件
加载控件的项目。
在“类视图”中,右击 ActiveX 控件类以打开快捷菜单。
在快捷菜单中单击“添加”,然后单击“添加事件”。
此操作将打开“添加事件向导”。
在“事件名称”下拉列表中选择一个常用事件名。在本例中,选择“Click”。
在“事件类型”中,选择“自定义”。
单击“完成”按钮创建事件。
在代码中的适当位置调用
MFC ActiveX 控件:方法 |
COleControl
MFC ActiveX 控件:添加自定义事件
自定义事件与常用事件的区别在于,自定义事件不由 COleControl 类自动引发。自定义事件将控件开发人员确定的某一操作识别为事件。自定义事件的事件映射项由EVENT_CUSTOM 宏表示。下一节实现用“ActiveX 控件向导”创建的 ActiveX 控件项目的自定义事件。
使用“添加事件向导”添加自定义事件
下列过程添加特定的自定义事件 ClickIn。可以使用此过程添加其他自定义事件。用自定义事件名及其参数替换 ClickIn 事件名和参数。使用“添加事件向导”添加 ClickIn 自定义事件
加载控件的项目。
在“类视图”中,右击 ActiveX 控件类以打开快捷菜单。
在快捷菜单中,单击“添加”,然后单击“添加事件”。
此操作将打开“添加事件向导”。
在“事件名称”框中,键入“ClickIn”。
在“内部名称”框中,键入事件的引发函数名。在本例中,使用“添加事件向导”提供的默认值 (
FireClickIn)。
使用 Parameter Name 和 Parameter Type 控件,添加称为
xCoord(
OLE_XPOS_PIXELS类型)的参数。
添加另一个称为
yCoord(
OLE_YPOS_PIXELS
类型)的参数。
单击“完成”按钮创建事件。
“添加事件向导”对自定义事件的更改
当您添加自定义事件时,“添加事件向导”会更改控件类 .H、.CPP 和 .IDL 文件。下列代码示例专用于 ClickIn 事件。下列代码行被添加到控件类的头 (.H) 文件:
复制
void FireClickIn(OLE_XPOS_PIXELSxCoord, OLE_YPOS_PIXELSyCoord)
{FireEvent(eventidClickIn,EVENT_PARAM(VTS_XPOS_PIXELS VTS_YPOS_PIXELS), xCoord, yCoord);}
此代码声明了一个称为
FireClickIn的内联函数,该函数用 ClickIn 事件和使用“添加事件向导”定义的参数调用
COleControl::FireEvent。
另外,下列代码行被添加到控件的事件映射,此事件映射位于控件类的实现 (.CPP) 文件中:
复制
EVENT_CUSTOM("ClickIn", FireClickIn, VTS_XPOS_PIXELS VTS_YPOS_PIXELS)
此代码将 ClickIn 事件映射到内联函数
FireClickIn,并传递使用“添加事件向导”定义的参数。
最后,下列代码被添加到控件的 .IDL 文件:
复制
[id(1)] void ClickIn(OLE_XPOS_PIXELSxCoord, OLE_YPOS_PIXELSyCoord);
这行代码根据 ClickIn 事件在“添加事件向导”事件列表中的位置,为该事件分配一个特定的 ID 号。事件列表中的项使容器得以预测该事件。例如,它可能提供在引发事件时执行的处理程序代码。
调用 FireClickIn
您已经使用“添加事件向导”添加了自定义事件,现在必须决定引发该事件的时间。通过在发生适当的操作时调用FireClickIn来完成此决定。在此讨论中,当用户在圆形或椭圆形区域内单击时,控件使用
WM_LBUTTONDOWN 消息处理程序中的
InCircle函数引发 ClickIn 事件。下列过程添加
WM_LBUTTONDOW 处理程序。
使用“添加事件向导”添加消息处理程序
加载控件的项目。
在“类视图”中,选择 ActiveX 控件类。
在“属性”窗口中,单击“消息”按钮。
“属性”窗口显示可由 ActiveX 控件处理的消息列表。任何以粗体显示的消息都有一个分配的处理函数。
在“属性”窗口中,选择要处理的消息。在本例中,选择“WM_LBUTTONDOWN”。
从右边的下拉列表框中,选择“<添加> OnLButtonDown”。
在“类视图”中双击新的处理函数,跳转到 ActiveX 控件的实现 (.CPP) 文件中的消息处理程序代码。
下面的代码示例在每次在控件窗口中单击鼠标左键时调用 InCircle 函数。该示例可在
Circ 示例摘要中的 WM_LBUTTONDOWN 处理函数 OnLButtonDown 中找到。
复制
void CSampleCtrl::OnLButtonDown(UINT nFlags, CPoint point) { if (InCircle(point)) FireClickIn(point.x, point.y); COleControl::OnLButtonDown(nFlags, point); }
注意 当“添加事件向导”创建鼠标按钮操作的消息处理程序时,将自动添加对基类的相同消息处理程序的调用。不要移除此调用。如果控件使用任何常用鼠标消息,则必须调用基类中的消息处理程序,以确保正确地处理鼠标捕获。
在下例中,仅当在控件中的圆形或椭圆形区域内发生单击操作时才引发事件。若要实现此行为,可以将
InCircle函数放置在控件的实现 (.CPP) 文件中:
复制
BOOL CSampleCtrl::InCircle(CPoint& point) { CRect rc; GetClientRect(rc); // Determine radii double a = (rc.right - rc.left) / 2; double b = (rc.bottom - rc.top) / 2; // Determine x, y double x = point.x - (rc.left + rc.right) / 2; double y = point.y - (rc.top + rc.bottom) / 2; // Apply ellipse formula return ((x * x) / (a * a 4000 ) + (y * y) / (b * b) <= 1); }
还需要将下列
InCircle函数声明添加到控件的头 (.H) 文件:
复制
BOOL InCircle( CPoint& point );
具有常用名的自定义事件
可以创建与常用事件同名的自定义事件,但不能在同一控件中同时实现这两个事件。例如,您可能想创建一个称为 Click 的自定义事件,此事件在通常引发常用 Click 事件时不引发。然后,可以通过调用此 Click 事件的引发函数随时引发它。下列过程添加自定义 Click 事件。
添加使用常用事件名的自定义事件
加载控件的项目。
在“类视图”中,右击 ActiveX 控件类以打开快捷菜单。
在快捷菜单中单击“添加”,然后单击“添加事件”。
此操作将打开“添加事件向导”。
在“事件名称”下拉列表中选择一个常用事件名。在本例中,选择“Click”。
在“事件类型”中,选择“自定义”。
单击“完成”按钮创建事件。
在代码中的适当位置调用
FireClick。
请参见
MFC ActiveX 控件 |MFC ActiveX 控件:方法 |
COleControl
相关文章推荐
- GridControlToExcel
- [Codecademy] HTML&CSS 第三课:HTML Basic II
- 只做一件事
- layer是一款近年来备受青睐的web弹层组件
- [bzoj3233] [Ahoi2013]找硬币
- Linux内核编译,模块尺寸变大的解决办法
- 什么是 MIME TYPE?
- 使用hbase版本异常
- android.support.design
- 我在Mac OS X 操作系统上搭建Android开发环境的经历
- 如何查看80端口被占用
- ASP.NET MVC 实现二级域名
- android 自定义View Caused by: java.lang.ClassNotFoundException: Didn't find class
- JAVA array,map 转 json 字符串
- svn merge和branch
- logistic回归和logic回归
- [Codecademy] HTML&CSS 第二课:Build Your Own Webpage
- 俄罗斯方块系列
- iOS-延迟操作方法总结
- 根据按钮切换表单