实验八 ActiveX 控件的创建与使用Word文件下载.docx

上传人:b****5 文档编号:20633921 上传时间:2023-01-24 格式:DOCX 页数:15 大小:130.67KB
下载 相关 举报
实验八 ActiveX 控件的创建与使用Word文件下载.docx_第1页
第1页 / 共15页
实验八 ActiveX 控件的创建与使用Word文件下载.docx_第2页
第2页 / 共15页
实验八 ActiveX 控件的创建与使用Word文件下载.docx_第3页
第3页 / 共15页
实验八 ActiveX 控件的创建与使用Word文件下载.docx_第4页
第4页 / 共15页
实验八 ActiveX 控件的创建与使用Word文件下载.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

实验八 ActiveX 控件的创建与使用Word文件下载.docx

《实验八 ActiveX 控件的创建与使用Word文件下载.docx》由会员分享,可在线阅读,更多相关《实验八 ActiveX 控件的创建与使用Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。

实验八 ActiveX 控件的创建与使用Word文件下载.docx

_DExample1和_DExample1Events,它们都是接口。

接口是控件与外部程序进行通信的协议。

可以把接口看作是函数的集合,外部程序通过这个接口所暴露出来的方法去访问控件的属性和方法。

实际上,可以把接口看作一个抽象基类,在此接口中定义的所有函数都是虚函数,这些函数的实现在CExample1Ctrl类中完成的。

所以通过接口调用的函数实际上是调用CExample1Ctrl中的函数来实现的。

(2)ActiveX控件不能独立运行,它必须嵌入到一个容器中运行。

编译并运行刚刚创建的工程,可以看到如图所示的对话框:

我们可以单击该对话框上标示了一个向右箭头的按钮,将弹出一个快捷菜单,选择【ActiveXControlTestContainer】菜单项,也就是选择ActiveXControlTestContainer这个应用程序作为Example1控件的容器。

然后单击上图所示对话框的【OK】按钮关闭该对话框。

这时将打开ActiveXControlTestContainer这个应用程序,如下图所示:

于是我们可以加载特定的ActiveX控件了,方法是选择【Edit\InsertNewControl...】菜单项,这时将打开如下图所示的对话框:

选中我们创建的Example1控件,单击对话框上的【OK】按钮关闭对话框,这时,在ActiveXControlTestContainer应用程序中就加载了Example1控件。

这时该控件的代码都是MFC自动生成的。

(3)控件功能的实现。

首先将CExample1Ctrl类中OnDraw函数中自动生成的两行代码注释起来,它们分别用来填充控件的背景和绘制椭圆。

然后为控件添加自定义属性,选择ClassWizard对话框上的Automation选项卡,然后单击【AddProperty】按钮,将弹出属性对话框。

在Externalname中填写属性名称为“SetText”,类型选择为“CString”,变量名被自动的设置为m_setText,而且ClassWizard为该控件增加了一个通知函数:

OnSetTextChanged,当在外部修改属性时,这个函数将被调用。

在添加属性对话框上还有三个单选按钮,保持默认选择的Membervariable,当选择该选项后,ClassWizard会为该属性生成一个成员变量和一个通知函数。

在CExample1Ctrl类的构造函数中对m_setText进行初始化,加入代码:

m_setText="

你好!

"

;

在通知函数OnSetTextChanged中加入代码如下:

Invalidate();

使窗口发生重绘调用OnDraw函数,在OnDraw函数中加入代码如下:

pdc->

TextOut(0,0,m_setText);

(4)为控件增加标准事件。

选择ClassWizard对话框上的ActiveXEvents选项卡,然后单击【AddEvent】按钮,将显示添加事件对话框,在此对话框上有一个名称为Externalname的组合框,当单击其右边向下的箭头时,将会看到列出了一些预先准备好的事件。

在Externalname下拉列表中选择Click,保持默认的Stock选项不变,然后单击【OK】按钮关闭AddEvent对话框,同理增加MouseMove事件,然后单击ClassWizard对话框上的【OK】按钮关闭该对话框。

这时,在ClassView选项卡中可以看到,在_DclockEvents接口下面增加了两个方法,就是刚刚添加的事件。

(5)测试控件的属性和事件。

利用Build命令生成控件,利用ActiveXControlTestContainer来测试该控件。

利用【Edit\InsertNewControl...】菜单项插入该控件后,选中该控件,然后单击【Control\InvokeMethods...】菜单项,这时将显示如下所示的对话框:

在此对话框中有一个方法名称(MethodName)下拉列表,在此列表中列出了当前控件提供的方法,如下图所示:

如果想要得到某个属性值,应该选择PropGet类型的方法;

如果想要设置某个属性的值,则应该选择PropPut类型的方法。

因此应该选择PropPut类型的方法,并在随后出现的对话框的Parameter编辑框中输入:

nihao,单击【SetValue】按钮,再单击【Invoke】按钮使得设置生效,观察运行结果。

当把鼠标放到控件上时,ActiveXControlTestContainer的位于下部的窗口将显示鼠标的位置;

当单击控件的时候,下部的窗口将显示控件被单击的消息。

(6)生成一个发行版本的ActiveX控件。

方法是在VC++开发环境打开Example1工程,然后选择【Build\SetActiveConfiguration...】菜单项,从弹出的对话框中选择“Example1-Win32Release”,单击【OK】按钮,然后重新利用Build命令生成控件。

(7)编写一个ActiveX控件的测试程序。

新建一个基于对话框的工程,命名为:

Example1Test,并删除自动生成的对话框资源上的静态文本控件。

在VC++中插入ActiveX控件的方法是,选择【Project\AddToProject\ComponentsandControl...】菜单项,将显示如下图所示的对话框:

在此对话框中双击“RegisteredActiveXControls”目录,并在此目录下找到Example1控件,然后单击【Insert】按钮,并单击随后显示的确认对话框上的【确认】按钮,这时将弹出如下图所示的对话框:

这时,会在工程中为该控件生成一个类,类名为Example1。

最后单击【OK】按钮关闭该对话框,并单击【Close】按钮关闭插入组件和控件的对话框。

这时,在ClassView选项卡上,可以看到增加了一个类:

Example1,该类提供了一些函数,我们只需要调用这些函数就可以访问Example1这个控件的方法和属性了。

同时,在工具箱上也增加了Example1控件的图标,我们只需要单击该图标,并在对话框资源上拖放在一块合适的区域就可以放置一个Example1控件了。

(8)在程序中动态的产生一个Example1控件,首先为CExample1TestDlg类增加一个成员变量,变量名为m_example1,类型为CExample1。

然后在CExample1TestDlg类的OnInitDialog函数中加入代码如下:

m_example1.Create("

example1"

WS_CHILD|WS_VISIBLE,CRect(0,0,100,50),this,123);

动态产生一个Example1控件,并在Example1Test.h文件中加入代码如下:

#include"

example1.h"

然后先在对话框上放置一个静态文本控件,Caputions设置为:

“输入要显示的字符串:

”。

再放置一个编辑框控件,并为编辑框控件关联一个Cstring类型的成员变量m_str。

再放置一个按钮控件,将Caputions设置为:

设置,ID设置为IDC_BUTTON,并为其添加单击消息OnButton。

最后放置一个Example1控件,调整位置如下图所示:

在OnButton函数中添加代码如下:

UpdateData();

m_example1.SetSetText(m_str);

利用编辑框来改变动态产生的Example1控件的显示文本。

编译并运行程序,通过编辑框来输入要显示的字符串,单击设置按钮来完成设置,观察Example1控件的显示文本。

(9)在VC中访问静态增加的Example1控件的事件。

在该控件上单击鼠标右键,从弹出的快捷菜单上选择【ClassWizard...】,将弹出如下图所示的对话框:

可以看到,通过ClassWizard可以为Example1控件增加Click事件和MouseMove事件。

如果要增加某个事件,在此对话框中选中该事件,然后单击【AddFunction...】按钮即可。

通过这种方法为Example1控件增加Click事件和MouseMove事件。

Click事件的消息响应函数为OnClickExample1ctrl2,MouseMove事件的消息响应函数为OnMouseMoveExample1ctrl2。

(10)首先为CExample1TestDlg类增加一个类型为CPoint的公有成员变量m_point,然后在OnClickExample1ctrl2函数中增加代码如下:

CClientDCdc(this);

CStringstr;

str.Format("

x=%d,y=%d"

m_point.x,m_point.y);

dc.TextOut(200,250,str);

完成当鼠标单击控件时,显示鼠标的位置。

鼠标的位置会在OnMouseMoveExample1ctrl2函数中添加,代码如下:

m_point.x=x;

m_point.y=y;

x,y);

dc.TextOut(100,100,str);

完成当鼠标在控件上移动时,显示鼠标的位置。

编辑并运行程序,观察结果。

实验2步骤:

Rectangle.然后单击【OK】进入向导的第一步,直接单击【Finish】按钮保持所有默认设置不变。

(2)控件功能的实现。

首先将CRectangleCtrl类中OnDraw函数中自动生成的两行代码注释起来。

然后为控件添加标准属性,选择ClassWizard对话框上的Automation选项卡,然后单击【AddProperty】按钮,将弹出属性对话框。

在Externalname选项卡中选择ForeColor前景色属性,其它保持默认设置。

为了实现设置前景色的功能,还有在CRectangleCtrl类的OnDraw函数中添加代码如下:

CBrushbrush(TranslateColor(GetForeColor()));

Rectangle(rcBounds);

FillRect(rcBounds,&

brush);

GetForeColor函数用来获得前景色,然后在整个控件区域内绘制一个矩形,最后用前景色来填充整个矩形。

(3)为控件增加标准事件—双击事件。

在Externalname下拉列表中选择DblClick,保持默认的Stock选项不变,然后单击【OK】按钮关闭AddEvent对话框,然后单击ClassWizard对话框上的【OK】按钮关闭该对话框。

(4)利用实验1中的方法来测试控件的属性和事件。

(5)生成一个发行版本的ActiveX控件。

方法是在VC++开发环境打开Rectangle工程,然后选择【Build\SetActiveConfiguration...】菜单项,从弹出的对话框中选择“Rectangle-Win32Release”,单击【OK】按钮,然后重新利用Build命令生成控件。

(6)编写一个ActiveX控件的测试程序。

RectangleTest,并删除自动生成的对话框资源上的静态文本控件。

利用实验1中的方法插入Rectangle控件。

这时,会在工程中为该控件生成一个类,类名为CRectangle。

(7)在程序中动态的产生一个Rectangle控件,首先为CRectangleTestDlg类增加一个成员变量,变量名为m_rectangle,类型为CRectangle。

然后在CRectangleTestDlg类的OnInitDialog函数中加入代码如下:

m_rectangle.Create("

Rectangle"

WS_CHILD|WS_VISIBLE,CRect(100,100,200,150),this,123);

动态产生一个Rectangle控件,并在RectangleTest.h文件中加入代码如下:

rectangle.h"

编译并运行程序,如下图所示:

(8)为动态产生的Rectangle控件增加双击事件的响应。

首先在ResourceView选项卡下,打开主对话框,并在其上静态拖放一个Rectangle控件,将其ID设置为IDC_RECTANGLECTRL1。

在该控件上单击鼠标右键,从弹出的快捷菜单上选择【ClassWizard...】,可以看到,通过ClassWizard可以为Rectangle控件增加DblClick事件。

(9)删除刚刚添加的静态Rectangle控件。

打开FileView选项卡,打开Resource.h文件,并在其中添加代码:

#defineIDC_RECTANGLECTRL1123

此时,即将动态创建的Rectangle控件和静态创建的Rectangle控件的双击事件结合在一起了。

(10)在Rectangle控件的双击事件响应函数OnDblClickRectanglectrl1中添加代码如下:

CColorDialogdlg;

if(IDOK==dlg.DoModal())

{

m_rectangle.SetForeColor(dlg.m_cc.rgbResult);

}

当双击Rectangle控件时,首先创建一个颜色对话框,当做出选择,按下“确定”按钮的时候,DoModal函数返回IDOK,此时,把颜色对话框中保存的结果dlg.m_cc.rgbResult传递给SetForeColor函数来设置控件的前景色。

(11)编辑并运行程序,观察实验结果。

下图为选择绿色为前景色所得结果:

 

四独立实验

1、创建一个控件,平时显示蓝色,调用“启动(Start)方法”后显示红色,维持一段时间后恢复原底色,方法包括对维持时间的设置,强行停止等,在维持过程中,要定时产生已维持时间信息,当维持时间结束时产生事件结束事件。

测试程序:

在对话窗口放置显示块(即控件),并对显示块进行设置和控制,包括启动、强行结束按钮,维持时间输入,用标准控件显示维持过程。

五技术支持

非规则外形的窗口建立方法:

在.H文件中加:

CRectm_rectWnd;

//记录窗口初始矩形

CRgnm_rgn;

//设置窗口所在区域

如果是窗口类,对话框模板的属性(Styles)设置为”popup”、无边界(Border)为none。

在初始化对话窗口函数中添加:

BOOLCmyDlg:

:

OnInitDialog()

{

CDialog:

OnInitDialog();

……………………

GetClientRect(m_rectWnd);

//获得对话窗口的尺寸

m_rgn.CreateEllipticRgn(0,0,m_rectWnd.right,m_rectWnd.bottom);

//创建窗口区域与窗口的关系,即限制窗口区域

SetWindowRgn((HRGN)m_rgn,TRUE);

}

如果希望获得其它形状,可利用CRgn函数,组成其它形状,如多区域的拼接,程序如下:

this->

GetClientRect(m_rect);

m_rgn1.CreateEllipticRgn(m_rect.Width()/2,0,m_rect.Width(),m_rect.Height());

m_rgn2.CreateEllipticRgn(0,0,m_rect.Width()/2,m_rect.Height());

m_rgn3.CreateRectRgn(0,0,50,50);

intnCombineResult=m_rgn3.CombineRgn(&

m_rgn1,&

m_rgn2,RGN_OR);

//ASSERT(nCombineResult!

=ERROR||nCombineResult!

=NULLREGION);

this->

SetWindowRgn((HRGN)m_rgn3,TRUE);

CRgn成员函数:

如果是一般窗口,增加对WM_CREATE消息处理,处理程序类似上面。

在控件中,处理方法与一般窗口类似。

2关于ActiveX

ActiveX控件是可执行的部件,它们被设计为嵌在一个窗口或网页中以完成一些自带的任务。

对用户来说,它们非常类似于Windows系统提供的普通控件。

从应用上看,对ActiveX的使用包括两部分,首先是如何在一个用户的应用程序中使用ActiveX控件,另一个部分就是如何编写ActiveX程序,当然包括调试等。

在MFC中,微软已经将将ActiveX编程方面的许多细节用框架已经解决了,这就大大地减轻了程序设计者的困难,ActiveX应用程序只需要很少或无需过多地了解关于简化了开发过程,可以将注意力集中在程序的设计方面。

名字是新的,而技术却是原来已经成熟的。

ActiveX控件是基于微软早期的OLE技术,OLE过去指的是对象链接与嵌入,但对象嵌入只是OLE功能的一个部分,随着软件技术的发展,它已经从一个为特殊目的而设计的技术,发展成为一个包括ActiveX在内的其它特定技术所依赖的通用体系结构。

OLE为创建和连接不同的程序部件(包括称为OLE自定义控件的服务器模块)定义了一个标准的蓝图。

简而言之,它们过去叫做OLE控件,现在微软将其称为ActiveX控件。

那么什么是ActiveX控件呢?

简单的回答就是:

ActiveX控件是一个动态链接库,它可以作为一个OLE服务器,而且可以被嵌在一个包容器主应用程序中。

ActiveX控件是可移植的软件模块,用于完成一点的任务。

ActiveX控件类类似于按钮和列表框等标准控件,可以在对话窗口和其它窗口中显示和使用。

ActiveX控件可以自己创建,从Internet下载或从其它软件商中获得。

ActiveX控件的优点在于无论应用应用程序使用哪种计算机语言,都可以插入ActiveX控件。

ActiveX控件由容器的概念而来,集成了容器的基本机制:

属性、事件和方法。

关键性的概念:

.ActiveX是由Microsoft公司定义的用于Internet的一种对象链接与嵌入技术(OLE)

.计算模型已经由传统的基于主机的模型发展为现代的ActiveX基于Internet的模型

.可以通过VisualBasic(控件创建版本)、VisualC++、BorlandC++、BorlandDelphi等工具来创建ActiveX控件。

可以通过诸如ActiveXControlPad之类的工具来写ActiveX脚本。

ActiveX文档(ActiveXDocument)是一种非HTML的文档,浏览器可以通过ActiveX技术来显示它

.通过在应用程序中使用Microsoft公司的ActiveX讨论开发工具集(SDK),使应用程序具有讨论的能力。

.通过使用ActiveXServer,可以使Web模型更为智能化.可以使用基于Microsoft组件对象模型(COM)的ActiveX

.Java与ActiveX是互为补充的

定义属性

定义固有属性和自定义属性。

修改属性页

ActiveX控件可以包括一个或几个属性页。

每个属性页可以形成一个对话框,可以包括控件的属性值。

可以用属性页定义属性的初始值。

每个属性页用对话编辑器中Properties对话框的标签

定义方法

在ActiveX控件中,可以定义方法,最常见的方法是AboutBox。

在VC的开发平台上,用户可以为设计的控件增加方法。

增加的方法应有方法名称、返回类型和参数。

用户也可以为ActiveX控件旦定义事件,ActiveX即可调用相关的Fire函数告诉容器程序发生了事件。

调用Fire函数称为产生事件。

同时产生事件可以调用相同的事件处理函数。

和属性与方法一样,事件有固有和自定义两种。

对固有事件,MFC提供了Fire函数和在适当时间调用这个函数的代码。

而对于自定义事件,则由ClassWizard产生新的Fire函数,当然这时需要编写发出事件时调用相应函数的代码。

COM是基本的‘对象模型”,根据COM,ActiveX控件与OLE才可建立。

COM允许对象向其他元件及应用显示其功能。

对于对象如何显示自身及这种显示如何贯穿于过程与网络作了定义。

COM也定义了对象的生命周期。

COM基本有以下内容:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 法语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1