[00004]-[2015-07-16]-[00]-[VC++ 开发Activity控件基础]

Visual C++是开发ActiveX控件的强大工具,它的特点是开发周期短、便于使用,因此它已经成为开发ActiveX控件的主要工具之一。Visual C++集成开发环境,使用了微软自己的类库MFC,MFC对开发ActiveX控件提供了全面的支持,本文讲述的过程均在Visual C++ 6.0(以下简称VC)中实现。

1、 创建工程:

对于使用过VC的人,可以很容易地创建一个开发ActiveX控件的工程,没有使用过VC的人,按

照下面的操作步骤,也可以很快创建一个同样的工程出来。

第一步:“File”—>“New”—>“(Projects)MFC ActiveX ControlWizard”,在“Project Name”中输入合适的工程名(以test为例),在“Location”中选择工程文件存放路径,然后,“OK”进入下一步;

第二步:选择你想在这个工程中生成的ActiveX控件的个数(至少一个),其余选项决定是否生成一些辅助文件,通常按照默认设置即可,“Next”进入下一步;

第三步:编辑你的工程中各个类和文件的名称,配置一些辅助选项,可以全部选择默认设置,“Finish”进入下一步;

第四步:展示向导为你的工程生成的各种配置信息,“Cancel”重新设置不满意的选项,“OK”结束工程的创建。

2、? 绘制控件:

MFC将对ActiveX控件的支持封装在COleControl类中,所有ActiveX控件均从这个类

派生。绘制控件的全部操作则集中在一个虚函数中—OnDraw(),其默认实现如下:

void CTestCtrl::OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)

{

// TODO: Replace the following code with your own drawing code.

pdc->FillRect(rcBounds,

  CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));

pdc->Ellipse(rcBounds);

}

可以看到,OnDraw()函数的默认实现是在矩形rcBounds中绘制一个椭圆,通过改写OnDraw()函数中的内容,就可以绘制自己想要的控件了。需要注意的一点,控件的绘制被限制在矩形rcBounds中,绘制范围不能超出这个矩形。

3、? 添加属性:

ActiveX控件提供了三种类型的属性供用户选择:公共属性、具有通知特性的属性和Get/Set

类型的属性。下面依次对三种类型属性的添加、初始化、新属性值的获取和属性的永久保存,分别进行介绍。

三种类型的属性的添加,都遵照相同的步骤:“View”—>“ClassWizard”—>“(Automation)Add Property”—>“Add Property”对话框。注意,“Class Name”中应是你想添加属性的控件类的名称(如CTestCtrl)。

㈠. 公共属性:

  COleControl类提供了九种常用的属性作为公共属性,我们以“Caption”为例。在“Add Property”对话框中的“External Name”选择“Caption”,“Implementation”中选中“Stock”,然后“OK”即向控件添加了Caption公共属性。

COleControl类为每一个公共属性都提供了默认的设置和获取成员函数,对于Caption属性有SetText()和GetText()(或InternalGetText())。

  COleControl类在函数DoPropExchange()中对于公共属性都有默认的初始化,但是我们可以在成员函数OnResetState()中,为公共属性设置我们自己想要的初始值。Caption默认的初始值为空,可以使用成员函数SetText( LPCTSTR pszText ),为其设置任意的字符串。

我们可以通过调用函数GetText()或InternalGetText()获得当前的Caption属性值。需要注意的是,对于GetText()函数,在调用之后,需要调用span lang="EN-US">SysFreeString()函数以释放资源。此外,GetText()函数的返回值为BSTR类型,经常需要与大家常用的CString字符串类型进行变换:BSTR可以直接赋值CString,也可以调用API函数::SysAllocString(Cstring);但是将CString转换成BSTR,必须调用函数CString::AllocSysString()。InternalGetText()函数则无上述烦恼。

对于公共属性的永久保存,在COleControl类的成员函数DoPropExchange()有默认实现,就无需大家费心了。

㈡. 具有通知特性的属性:

在“Add Property”对话框的“Implementation”中选中“Member variable”,即选择了向控

件添加具有通知特性的属性。在“External Name”中输入属性的名字(Shape),在“Type”中选择变量类型(BOOL),“Variable Name”和“Notification function”中会自动生成默认的变量名(m_shape)和通知函数名(OnShapeChanged),当然也可以手工输入自己习惯的名字。最后,“OK”便向控件添加了一个具有通知特性的属性。

对于属性的初始化和永久保存,只要在DoPropExchange()函数中调用PX_函数即可。按照上面添加的属性例子,可以如是调用:PX_Bool(pPX, _T("Shape"), m_bShape, FALSE)。其中,“FALSE”为变量“m_bShape”即属性“Shape”的初始值。

至此,不得不先说一下控件的属性对话框了。MFC将控件的属性对话框封装在类COlePropertyPage中,所有控件的属性对话框都派生自这个类。控件的属性对话框,是控件开发者提供给控件用户、用于定制控件外观的通讯工具,控件用户可以通过它来修改控件的某些属性。COlePropertyPage类中最重要的成员当属DoDataExchange()函数了,控件开发者就是通过在其中调用DDP_函数把控件的属性与控件属性对话框中的各种控件联系起来的。对于控件的公共属性,在为属性对话框中的相应控件添加变量的时候,可以在“Optional property name”中选择相应的公共属性,则属性对话框类就会在DoDataExchange()函数种自动添加相应的DDP_函数,例如,对于Caption属性,就会自动添加这样的语句:DDP_Text(pDX, IDC_CAPTION_EDIT, m_strCaption, _T("Caption") );但是对于用户添加的自定义属性,则必须手工输入DDP_函数,例如,对于前面添加的“Shape”属性,应添加如下语句:DDP_Check(pDX, IDC_SHAPE_CHECK, m_bShape, _T("Shape") )

对于“Notification function”需要补充说明的是,虽然在相应的函数中,属性添加向导会自动添加函数SetModifiedFlag(),但是如果需要在属性被改变时,相应改变控件的显示,则需开发人员手工加入函数InvalidateControl()(它会激发OnDraw()函数的调用)。

㈢. Get/Set类型的属性:

在“Add Property”对话框的“Implementation”中选中“Get/Set mothods”,即选择了向控

件添加“Get/Set类型的属性”。 在“External Name”中输入属性的名字(Color),在“Type”中选择变量类型(OLE_COLOR),“Get function”和“Set function”中会自动生成默认的函数名“GetColor”和“SetColor”,当然也可以手工输入自己习惯的函数名。最后“OK”,便完成了向控件添加Get/Set类型的属性。

时间: 2024-12-15 22:42:14

[00004]-[2015-07-16]-[00]-[VC++ 开发Activity控件基础]的相关文章

图解VC++开发ActiveX控件C#调用

1 新建ActiveX控件工程 2 编译,运行 使用下图所示VC++自带测试工具来测试ActiveX控件: 3 测试容器 插入刚做的ActiveXDemo1控件 4 添加属性 添加名为outstr的属性; 在控件的实现文件中加入黑体一句: void CActiveXDemo1Ctrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { // TODO: Replace the following code

VC++编写ActiveX控件

ActiveX这门技术是通过生成“*.ocx”文件来实现的.先来了解下OCX文件,在百度百科上面对OCX是这样解释的:“.ocx是ocx控件的扩展名,OCX 是对象类别扩充组件.如果你用过Visual Basic或者Delphi一类的可视化编程工具,那么对控件这个概念一定不会陌生,就是那些工具条上的小按钮,如 EditBox,Grid,ImageBox,Timer等等.每个控件都有自己的事件.方法和属性.使用了控件的编程非常容易.首先,在程序的设计阶段可以设置一些属性,如大小,位置,标题(cap

张珺 2015/07/16 个人文档

姓名 张珺 日期 中蓝公寓蓝芳园D507,2015/07/16 主要工作及心得 今天我们开始进行文档的编写工作,对全部的文档进行了分工,我负责了概要设计说明书的编写.详细设计说明书中客户端里操作员相关内容的编写和对于操作员中相关操作的人工测试工作. 遇到的问题 报告中各项的编写要求.报告格式 解决方法 明天去找老师讨论有关报告的问题

使用VC2008中ATL开发浏览器控件

http://blog.csdn.net/cnjet/article/details/6218355 使用VC2008中ATL开发浏览器控件 2011.03.02 [email protected] 介绍 本文将介绍使用VC2008中的ATL开发一个用于网络部署的cab控件包的过程. 建立ATL项目 打开VS2008,建立一个ATL项目,如下图: 考虑到简介性,选择了"Allow merging of proxy/stub code" 添加ATL控件 (建议先编译一下真个project

使用C#开发ActiveX控件(新)

前言 ActiveX控件以前也叫做OLE控件,它是微软IE支持的一种软件组件或对象,可以将其插入到Web页面中,实现在浏览器端执行动态程序功能,以增强浏览器端的动态处理能力.通常ActiveX控件都是用C++或VB语言开发,本文介绍另一种方式,在.NET Framework平台上,使用C#语言开发ActiveX控件. 虽然本文通篇都在讲如何使用C#语言开发ActiveX控件,但我并不极力推荐使用这种技术,因为该技术存在明显的局限,即需要浏览器端安装.NET Framework(版本取决于开发Ac

一些基于jQuery开发的控件

基于jQuery开发,非常简单的水平方向折叠控件.主页:http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-accordion.html (无法找到)下载:http://letmehaveblog.blogspot.com/2007/10/haccordion-simple-horizontal-accordion.html 示例:http://letmehaveblog.blogspot.com/2007

CAD控件,CAD插件使用教程:Android开发使用控件--开发环境的搭建

Android开发使用控件入门--环境搭建 2014-12-24 09:57     14人阅读     评论(0)     收藏         编辑     删除 CAD控件.CAD三维控件,手机控件 Android开发控件 软件名称(,梦,,想.CAD  ,控件) 1. 环境搭建: 3 1.1. 安装Eclipse 3 1.2. 下载JDK 3 1.3. 下载Android SDK 5 1.4. 给Eclipse 安装ADT插件  8 1.5. 运行Eclipse设置Android ADT

VC/MFC ListCtrl 控件功能使用汇总(转)

以下未经说明,listctrl默认view 风格为report 相关类及处理函数 MFC:CListCtrl类 SDK:以 "ListView_"开头的一些宏.如 ListView_InsertColumn -------------------------------------------------------------------------------- 1. CListCtrl 风格      LVS_ICON: 为每个item显示大图标      LVS_SMALLIC

零元学Expression Blend 4 - Chapter 16 用实例了解交互控件“Button”II

本章将教大家如何制作自己的Button,并以玻璃质感Button为实践案例. 本章将教大家如何制作自己的Button,并以玻璃质感Button为实践案例 01 拉出一个圆 请以Ellipse拖拉出一个圆形,并修改圆形的颜色 范例: Fill->Gradient brush->Radial gradient(0%.#FFFF0000)(100%#FF000000) 02 把圆形转换成控件 选取圆形,并且在圆形上单击鼠标右键->Make Into Control 点选Button以及命名完成