实验八 ActiveX 控件的创建和使用.doc
《实验八 ActiveX 控件的创建和使用.doc》由会员分享,可在线阅读,更多相关《实验八 ActiveX 控件的创建和使用.doc(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验八 ActiveX 控件的创建和使用一 实验目的1 掌握基于 MFC 创建 ActiveX 控件的过程2 掌握 ActiveX 控件的属性和事件的编程方法3 了解非标准形状控件的编程方法二 实验要求8.1 创建一个控件,在控件上显示一串字符,设置属性,可以对显示的字符进 行设置和修改;另一方面,设置两个事件,当鼠标移动时,将鼠标的位置告知, 当鼠标左键压下时,产生另一个事件,告知鼠标位置。编写测试程序,在对话窗口上使用编写的控件,可以输入在控件上待显示 的字符,当鼠标在控件上移动时,在对话框上显示其坐标。当鼠标左键压下时, 产生另一个事件,告知鼠标位置。8.2 创建一椭圆形控件(或其它形状
2、),双击后弹出颜色设置对话窗口,选择 其中颜色,将控件颜色设置为选择的颜色。编写测试程序,在测试程序中测试 控件的功能。三 实验过程实验 1 步骤:(1)首先利用 MFC ActiveX ControlWizard 生成一个 ActiveX 控件程序的框架。在 VC+开发环境中,选择【FileNew】菜单项,在打开的对 话框上选择 Projects 选项卡,并在列表框中 MFC ActiveX ControlWizard,工 程命名为:Example1。然后单击【OK】进入向导的第一步,直接单击 【Finish】按钮保持所有默认设置不变。说明:其中 CExample1App 类是从 CWinA
3、pp 派生的,所以可以把该类看作是一个 应用程序类。CExample1Ctrl 类是从 CWnd 类派生的,对控件窗口进行的操作都 将在 CExample1Ctrl 类中完成。在 CExample1Ctrl 类的头文件中提供了消息映 射、调度映射和事件映射。调度映射是为了让外部应用程序可以方便地访问控 件的属性和方法,而事件映射让控件可以向包含它的容器发送事件通知。Example1PropPage 类派生于 CDialog 类,是用来显示 Example1 控件的属性 页的,该类和一个 ID 为 IDD_PROPPAGE_EXAMPLE1 的对话框资源相对应。在上述 介绍的三个类的上面还有两项
4、内容:_DExample1 和_DExample1Events,它们都是接口。接口是控件与外部程序进行通信的协议。可以把接口看作是函数的集 合,外部程序通过这个接口所暴露出来的方法去访问控件的属性和方法。实际 上,可以把接口看作一个抽象基类,在此接口中定义的所有函数都是虚函数, 这些函数的实现在 CExample1Ctrl 类中完成的。所以通过接口调用的函数实际 上是调用 CExample1Ctrl 中的函数来实现的。(2)ActiveX 控件不能独立运行,它必须嵌入到一个容器中运行。编译并运行 刚刚创建的工程,可以看到如图所示的对话框:我们可以单击该对话框上标示了一个向右箭头的按钮,将弹出一
5、个快捷菜单, 选择【ActiveX Control Test Container】菜单项,也就是选择 ActiveX Control Test Container 这个应用程序作为 Example1 控件的容器。然后单击 上图所示对话框的【OK】按钮关闭该对话框。这时将打开 ActiveX Control Test Container 这个应用程序,如下图所示:于是我们可以加载特定的 ActiveX 控件了,方法是选择【EditInsert New Control.】菜单项,这时将打开如下图所示的对话框:选中我们创建的 Example1 控件,单击对话框上的【OK】按钮关闭对话框,这时, 在
6、ActiveX Control Test Container 应用程序中就加载了 Example1 控件。这 时该控件的代码都是 MFC 自动生成的。(3)控件功能的实现。首先将 CExample1Ctrl 类中 OnDraw 函数中自动生成的 两行代码注释起来,它们分别用来填充控件的背景和绘制椭圆。然后为控件添 加自定义属性,选择 ClassWizard 对话框上的 Automation 选项卡,然后单击 【Add Property】按钮,将弹出属性对话框。在 External name 中填写属性名 称为“SetText”,类型选择为“CString”,变量名被自动的设置为 m_setTe
7、xt,而且 ClassWizard 为该控件增加了一个通知函数: OnSetTextChanged,当在外部修改属性时,这个函数将被调用。在添加属性对 话框上还有三个单选按钮,保持默认选择的 Member variable,当选择该选项后, ClassWizard 会为该属性生成一个成员变量和一个通知函数。在 CExample1Ctrl 类的构造函数中对 m_setText 进行初始化,加入代码:m_setText=“你好!“;在 通知函数 OnSetTextChanged 中加入代码如下:Invalidate();使窗口发生重绘 调用 OnDraw 函数,在 OnDraw 函数中加入代码如下
8、:pdc- TextOut(0,0,m_setText);(4)为控件增加标准事件。选择 ClassWizard 对话框上的 ActiveX Events 选 项卡,然后单击【Add Event】按钮,将显示添加事件对话框,在此对话框上有 一个名称为 External name 的组合框,当单击其右边向下的箭头时,将会看到 列出了一些预先准备好的事件。在 External name 下拉列表中选择 Click,保 持默认的 Stock 选项不变,然后单击【OK】按钮关闭 Add Event 对话框,同理 增加 MouseMove 事件,然后单击 ClassWizard 对话框上的【OK】按钮关
9、闭该对 话框。这时,在 ClassView 选项卡中可以看到,在_DclockEvents 接口下面增 加了两个方法,就是刚刚添加的事件。(5)测试控件的属性和事件。利用 Build 命令生成控件,利用 ActiveX Control Test Container 来测试该控件。利用【EditInsert New Control.】菜单项插入该控件后,选中该控件,然后单击【ControlInvoke Methods.】菜单项,这时将显示如下所示的对话框:在此对话框中有一个方法名称(Method Name)下拉列表,在此列表中列出了当 前控件提供的方法,如下图所示:如果想要得到某个属性值,应该选
10、择 PropGet 类型的方法;如果想要设置某个 属性的值,则应该选择 PropPut 类型的方法。因此应该选择 PropPut 类型的方 法,并在随后出现的对话框的 Parameter 编辑框中输入:ni hao,单击【Set Value】按钮,再单击【Invoke】按钮使得设置生效,观察运行结果。当把鼠标 放到控件上时,ActiveX Control Test Container 的位于下部的窗口将显示鼠 标的位置;当单击控件的时候,下部的窗口将显示控件被单击的消息。(6)生成一个发行版本的 ActiveX 控件。方法是在 VC+开发环境打开 Example1 工程,然后选择【BuildS
11、et Active Configuration.】菜单项, 从弹出的对话框中选择“Example1-Win32 Release”,单击【OK】按钮,然后重 新利用 Build 命令生成控件。(7)编写一个 ActiveX 控件的测试程序。新建一个基于对话框的工程,命名为: Example1Test,并删除自动生成的对话框资源上的静态文本控件。在 VC+中插 入 ActiveX 控件的方法是,选择【ProjectAdd To ProjectComponents and Control.】菜单项,将显示如下图所示的对话框:在此对话框中双击“Registered ActiveX Controls”目
12、录,并在此目录下找到 Example1 控件,然后单击【Insert】按钮,并单击随后显示的确认对话框上的 【确认】按钮,这时将弹出如下图所示的对话框:Comment 园园园园1: 应是对话框类Comment 园园园园2: 什么这时,会在工程中为该控件生成一个类,类名为 Example1。最后单击【OK】按 钮关闭该对话框,并单击【Close】按钮关闭插入组件和控件的对话框。这时, 在 ClassView 选项卡上,可以看到增加了一个类:Example1,该类提供了一些 函数,我们只需要调用这些函数就可以访问 Example1 这个控件的方法和属性了。 同时,在工具箱上也增加了 Example
13、1 控件的图标,我们只需要单击该图标,并 在对话框资源上拖放在一块合适的区域就可以放置一个 Example1 控件了。(8)在程序中动态的产生一个 Example1 控件,首先为 CExample1TestDlg 类增 加一个成员变量,变量名为 m_example1,类型为 CExample1。然后在 CExample1TestDlg 类的 OnInitDialog 函数中加入代码如下: m_example1.Create(“example1“,WS_CHILD|WS_VISIBLE,CRect(0,0,100,50),th is,123);动态产生一个 Example1 控件,并在 Exam
14、ple1Test.h 文件中加入代码 如下:#include “example1.h“。然后先在对话框上放置一个静态文本控件, Caputions 设置为:“输入要显示的字符串:”。再放置一个编辑框控件,并 为编辑框控件关联一个 Cstring 类型的成员变量 m_str。再放置一个按钮控件, 将 Caputions 设置为:设置,ID 设置为 IDC_BUTTON,并为其添加单击消息 OnButton。最后放置一个 Example1 控件,调整位置如下图所示:在 OnButton 函数中添加代码如下:UpdateData(); m_example1.SetSetText(m_str);利用编
15、辑框来改变动态产生的 Example1 控件 的显示文本。编译并运行程序,通过编辑框来输入要显示的字符串,单击设置 按钮来完成设置,观察 Example1 控件的显示文本。(9)在 VC 中访问静态增加的 Example1 控件的事件。在该控件上单击鼠标右键, 从弹出的快捷菜单上选择【ClassWizard.】,将弹出如下图所示的对话框:可以看到,通过 ClassWizard 可以为 Example1 控件增加 Click 事件和 MouseMove 事件。如果要增加某个事件,在此对话框中选中该事件,然后单击 【Add Function.】按钮即可。通过这种方法为 Example1 控件增加
16、Click 事 件和 MouseMove 事件。Click 事件的消息响应函数为 OnClickExample1ctrl2,MouseMove 事件的消息响应函数为 OnMouseMoveExample1ctrl2。(10)首先为 CExample1TestDlg 类增加一个类型为 CPoint 的公有成员变量 m_point,然后在 OnClickExample1ctrl2 函数中增加代码如下:CClientDC dc(this);CString str;str.Format(“x=%d,y=%d“,m_point.x,m_point.y);dc.TextOut(200,250,str);完
17、成当鼠标单击控件时,显示鼠标的位置。鼠标的位置会在 OnMouseMoveExample1ctrl2 函数中添加,代码如下:CClientDC dc(this);m_point.x=x;m_point.y=y;CString str;str.Format(“x=%d,y=%d“,x,y);dc.TextOut(100,100,str);完成当鼠标在控件上移动时,显示鼠标的位置。编辑并运行程序,观察结果。实验 2 步骤:(1)首先利用 MFC ActiveX ControlWizard 生成一个 ActiveX 控件程序的框 架。在 VC+开发环境中,选择【FileNew】菜单项,在打开的对话框
18、上选择 Projects 选项卡,并在列表框中 MFC ActiveX ControlWizard,工程命名为: Rectangle.然后单击【OK】进入向导的第一步,直接单击【Finish】按钮保持 所有默认设置不变。(2)控件功能的实现。首先将 CRectangleCtrl 类中 OnDraw 函数中自动生成的 两行代码注释起来。然后为控件添加标准属性,选择 ClassWizard 对话框上的 Automation 选项卡,然后单击【Add Property】按钮,将弹出属性对话框。在 External name 选项卡中选择 ForeColor 前景色属性,其它保持默认设置。为 了实现设
19、置前景色的功能,还有在 CRectangleCtrl 类的 OnDraw 函数中添加代 码如下:CBrush brush(TranslateColor(GetForeColor();pdc-Rectangle(rcBounds);pdc-FillRect(rcBounds,GetForeColor 函数用来获得前景色,然后在整个控件区域内绘制一个矩形,最 后用前景色来填充整个矩形。(3)为控件增加标准事件双击事件。选择 ClassWizard 对话框上的 ActiveX Events 选项卡,然后单击【Add Event】按钮,将显示添加事件对话框,在此 对话框上有一个名称为 External
20、 name 的组合框,当单击其右边向下的箭头时, 将会看到列出了一些预先准备好的事件。在 External name 下拉列表中选择 DblClick,保持默认的 Stock 选项不变,然后单击【OK】按钮关闭 Add Event 对话框,然后单击 ClassWizard 对话框上的【OK】按钮关闭该对话框。(4)利用实验 1 中的方法来测试控件的属性和事件。(5)生成一个发行版本的 ActiveX 控件。方法是在 VC+开发环境打开 Rectangle 工程,然后选择【BuildSet Active Configuration.】菜单项, 从弹出的对话框中选择“Rectangle-Win32
21、 Release”,单击【OK】按钮,然后 重新利用 Build 命令生成控件。(6)编写一个 ActiveX 控件的测试程序。新建一个基于对话框的工程,命名为: RectangleTest,并删除自动生成的对话框资源上的静态文本控件。利用实验 1 中的方法插入 Rectangle 控件。这时,会在工程中为该控件生成一个类,类名 为 CRectangle。(7)在程序中动态的产生一个 Rectangle 控件,首先为 CRectangleTestDlg 类 增加一个成员变量,变量名为 m_rectangle,类型为 CRectangle。然后在 CRectangleTestDlg 类的 OnI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 试验 activex 控件 创建 创立 以及 使用
限制150内