VC++编写ActiveX控件详解Word文件下载.docx
- 文档编号:17958663
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:52
- 大小:389.13KB
VC++编写ActiveX控件详解Word文件下载.docx
《VC++编写ActiveX控件详解Word文件下载.docx》由会员分享,可在线阅读,更多相关《VC++编写ActiveX控件详解Word文件下载.docx(52页珍藏版)》请在冰豆网上搜索。
2.自VC++生成的模板基础上自定义功能
所有的自定义功能基本上都来自于“MFCClassWizard”类向导对话框。
(“快捷键Ctrl+W”或者“查看”->
“建立类向导…”)
在“Automation”选项卡中为控件添加方法和属性。
在“ActiveXEvents”选项卡中为控件添加事件。
2.1添加控件属性
切换到“Automation”选项卡中,点击右边的“AddProperty…”会弹出对话框:
Externalname:
外部名称。
指此控件被使用时,外部程序看到的属性名称,仅在外部引用时被使用。
Type:
属性类型。
除了基本的整形等数据类型外,还有很多复杂的高级数据类型。
Variablename:
变量名称。
此属性在控件源文件中的变量名称,在编写控件源码时使用。
Notificationfunction:
提醒函数。
当此属性被改变时,会触发此提醒函数。
Implementation:
实现方式。
指属性的三种类型:
固有型,成员变量型,Get/Set方法型。
固有型是指系统赋予的固有属性,如背景色,标题;
成员变量型是用户自定义的属性;
Get/Set方法型,可能是指只能通过Get/Set方法才能获取和改变的变量吧(这个没研究)。
2.2添加控件方法
在“Automation”选项卡中,点击右边的“AddMethod…”会弹出对话框:
方法外部名称。
Internalname:
方法内部名称。
Returntype:
返回值类型。
两种:
固有方法,自定义方法。
Parameterlist:
参数列表。
参数名称和参数类型:
参数类型包含很多高级数据类型。
2.3添加控件事件
切换到“ActiveXEvents”选项卡中,点击右边的“AddEvent…”会弹出对话框:
事件外部名称。
事件内部名称。
比外部名称多了个前缀“Fire”。
固有事件,自定义事件。
固有事件一般是鼠标移动,双击等等事件,这些事件都由系统消息触发;
自定义事件则是完全由用户定义的一个函数,但这个函数需要用户在源文件中调用(在内部调用,对于控件的使用方来说,就相当于在调用的地方此事件被触发,而内部传入的参数,则是此事件产生的消息附带信息)。
总述:
通过“类向导”工具,为控件添加属性、方法和事件后,VC++会自动在相应的文件里面生成代码,比如内部方法属性和外部方法属性之间的映射,消息的建立,消息的声明,等等。
如果用户要对引进行深入研究,还需要对程序的结构比较熟悉,知道各部分代码的作用,知道哪些地方的代码是系统自动生成的,哪些代码需要用户手动加入的。
VisualC++开发环境虽然有很多优点,但有个缺点也很明显,就是代码结构比较乱,感觉没有VS2005和后面的VisualStudio系列要好。
但是由于VC6.0作为一个比较经典的开发环境,而且网上的有关C++的程序设计基本上都是基于VC6.0的,所以,有必要对其进行学习,便于自己读懂网上的代码并进行消化吸收。
2.4生成ocx文件并调试
直接编译用户加入了自定义代码的项目,然后在项目的Debug目录下面会生成一个ocx文件,这个就是此控件的注册文件了。
控件的调试工具仍然是“ActiveXControlTestContainer”。
假设我们在控件中加入了一个事件:
固有事件——“MouseMove”鼠标移动事件;
用户自定义事件——ocxClick事件(此事件是通过“WM_MOUSEMOVE”消息来触发的,返回的是鼠标当前位置的x坐标)。
运行“ActiveXControlTestContainer”并插入当前控件,当鼠标在上面移动的时候,可以看到MouseMove产生了事件了。
同时可以通过“Control”-》“InvokeMethod”来对控件的方法进行测试,测试的方法就是你输入参数,它返回计算结果(下面以自定义的方法funHello为例)。
3.控件的使用方法
3.1注册控件
ocx控件的安装方式有很多种,这里介绍最简单的一种。
步骤:
1.将需要安装的OCX控件文件复制到某个目录,例如C盘根目录下。
2.进入开始,点击运行。
3.在出现的框中键入regsvr32C:
/xxxx.ocx。
(XXXX为控件名,C:
/为目录)
4.点击确认后等待出现提醒注册成功即可。
3.2ActiveX控件的调用
ActiveX作为一种通用的COM组件,可以被不同语言调用的。
3.2.1通过VC++调用
利用VC6.0建立一个MFC的基本对话框应用程序
在完成程序向导后。
执行下面的步骤:
1.执行“工程”-》“添加到工程”--》“ComponentsandControls…”。
2.在弹出的文件浏览对话框中,找到RegisteredActiveXControls文件目录下的你刚才注册的控件,比如“OcxDemoControl”,然后点击“Insert”按钮即可将此控件添加到控件工具条集合中。
3.将控件工具条上新增加的OCX控件拖入到应用程序主窗口中。
完成上面的步骤后,就可以像使用普通控件一样在VC中使用此控件了(右击此控件,可以查看此控件的“事件”和“属性”,就是你在编写控件源码时的那些“外部名称Externalname”)。
3.2.2通过C#调用
其实这个才是重点,因为跨语言调用ActiveX技术最被笔者看好的地方。
用VisualStudio2005新建一个C#.NET的Windows窗口程序,然后在工具箱面板上,右击“选择项”,选择COM组件,找到你注册的ActiveX控件:
确定后,那个OcxDemoControl控件就加载到工具箱里面了。
可以直接拖动这个控件到C#.NET应用程序的主窗口上去了,然后就像使用普通控件那样使用此控件了。
比如,本文中的ActiveX控件的自定义事件中,是通过鼠标移动来触发,那么在应用程序中,只要鼠标移动到控件上,那么就会触发此自定义事件,并获取当前鼠标位置的橫坐标。
4.最后一些Tip
1)在自定义控件时,可在控件源码的OnDraw()函数中设置控件的外观(也就是控件被拖入到应用程序中时呈现的样子,一般默认是一个白色的方框内切椭圆的样式)。
2)用C#来使用ActiveX的事件时,事件所产生的数据都包含在Event变量中,只需要用个点运算符就可以取出来了。
5.展望
控件函数的返回值类型那么多,那么复杂,如果要用得好,还需要对那些OLE数据类型进行好好学习,这个等今后需要时再慢慢学习吧。
演练VC中的COMMON一族(转贴)
2008-12-0921:
43:
18|
分类:
VC小知识阅读41评论0
字号:
大中小
订阅
声明:
由于在csdn论坛看到不少vc新手问及vc控件的使用。
本人手头正好有一份以前下载到的一份资料,讲述的比较详细。
所以发出来和大家共享。
但由于时间久远,已不及得下载的地址了。
所以只能以收藏方式发表。
下面有原作者的单位和姓名。
在此表示歉意!
演练vc中的common一族
辽宁省铁岭市委办公室(112000)宋立波
1.表头控制
headercontrol
2.图像列表控制
imagelist
3.列表控制和视
listcontrol&
listview
4.树控制和视
treecontrol&
treeview
5.标签控制和视
tabcontrol&
tabview
6.工具条控制
toolbarcontrol
7.进度条控制
progresscontrol
8.滑动条控制
slidercontrol
9.旋转按钮控制
spinbuttoncontrol
10.状态条控制
statusbarcontrol
其中,绝大部分通用控制在mfc类库中都存在两种封装形式,即控制类和视类,控制类主要是供直接使用控制而提供的,而视类则是通过间接使用控制而提供的,视类可以更好地把控制类集成到mfc结构中,并且使用视类可以利用引用直接对嵌套在其中的控制进行各种操作。
两者在使用方法上没有太大区别,就拿列表控制类和视类来说,当创建列表视后可通过clistctrl&
ctrllist=
getlistctrl()成员函数取得视类引用ctrllist之后,就可以利用列表视的视函数对视进行各项操作(ctrllist.add等)。
第1章演练cheadctrl
表头控制(cheaderctrl)通常应用在窗口中的文本或数据的列表之上。
一般为数据列的标题,可以包括多个部分,用户可以拖动每个部分并可以控制每列的宽度。
表头控制类提供了普通表头控制的基本方法,只有在windows95以后版本系统中才提供,其方法包含在afxcmn.h文件中,一般与标签控制(ctabctrl)和列表控制(clistctrl)组合使用。
1.1表头控制的对象结构
1.1.1表头控制对象的建立方法
cheaderctrl&
cheaderctrl建立表头控制对象
create
建立表头并绑定对象
cheaderctrl:
:
create的格式如下:
boolcreate(dworddwstyle,constrect&
rect,cwnd*pparentwnd,uintnid);
其返回值非零时初始化成功,否则失败。
参数dwstyle用来确定表头控制类型;
rect用来确定表头控制的大小和位置;
parentwnd用来确定表头控制的父窗口;
nid用来表示表头控制的标志。
表头控制风格包括:
hds_buttons
表示表头控制外观类似按钮;
hds_horz
表示表头控制为水平排列;
hds_vert
表示表头控制为垂直排列;
hds_hidden
表示表头控制为隐藏模式。
它也可以使用普通类控制风格,包括:
ccs_bottom
设置控制位置在父窗口的底部并与父窗口同样宽度;
ccs_nodivider
在控制顶部形成两个像素的高亮区;
ccs_nohilite
在控制顶部形成一个像素的高亮区;
ccs_nomovey
在响应wm_size消息时重置大小并水平排列;
ccs_noparentalign
使控制自动靠近父窗口的顶部或底部;
ccs_noresize
设置初始大小或新值时使控制使用默认宽度和高度;
ccs_top
设置在父窗口客户区域的顶部并与父窗口同样宽度;
同样表头控制也可以使用窗口控制风格,包括:
ws_child
建立一个子窗口,不能用于ws_popup窗口类型;
ws_visible
建立一个初始时不可见的窗口;
ws_disabled
建立一个初始时无效的窗口;
ws_group
确定可用光标移动的控制群组;
ws_tabstop
确定可用tab控制移动站点;
表头控制一般分为两个步骤,首先确定表头控制的数据结构,然后建立表头控制并绑定对象。
1.1.2表头控制的属性
表头控制的属性包括取得表头控制中项目的数量getitemcount、取得表头控制中某一项目的内容getitem和设置表头控制中某一项目的内容setitem。
1.1.3表头控制的操作方法
表头控制的操作方法包括向表头控制中插入一个新项目insertitem、从表头控制中删除一个项目deleteitem和绘制表头中给定的项目drawitem等。
1.2表头控制的数据结构
在使用表头控制时,首先必须建立一个数据结构hd_item,其结构定义如下:
typedefstruct_hd_item
{uint
mask;
file:
//结构成员有效控制位
int
cxy;
//表头项目的宽度
lpstr
psztext;
//表头项目内容
hbitmaphbm;
//表头项目的位置句柄
cchtextmax;
//表头内容字符串长度
fmt;
//表头项目的格式
lparam
lparam;
//应用程序定义的32位数据
}hd_item;
屏蔽控制位说明了数据结构成员中包含的有效数据,可以是下面标志的组合:
hdi_bitmap
hbm成员有效
hdi_format
fmt成员有效
hdi_lparam
lparam成员有效
hdi_text
psztext和cchtextmax成员有效
hdi_width
cxy成员有效并确定项目宽度值
格式标志位fmt可以是以下标志的组合:
hdf_center
表头项目居中
hdf_left
表头项目左对齐
hdf_right
表头项目右对齐
hdf_bitmap
表头显示一个位图
hdf_ownerdraw
由主窗口自绘表头项目
hdf_string
表头项目为一个字符串
1.3表头控制的应用技巧
由于表头控制无法单独使用,其主要是配合列表控制和标签控制,并多以文字表头应用多见,insertitem、setitem和getitem是常用的方法,如在列表控制时利用insertcolumn属性就可以增加一个表列的文本标题,具体用法和技巧见列表控制和标签控制。
下面以在列表控制中的增加表列的方法来具体说明:
lvcol.psztext="
品
名"
;
//设置第一列表头名
lvcol.isubitem=i;
//表列序号
lvcol.cx=70;
//表列宽度
m_listctrl.insertcolumn(i++,&
lvcol);
//插入一个表列
数
量"
//设置第二列表头名
......//其它代码
第2章演练cimagelist
图像列表控制(cimagelist)是相同大小图像的一个集合,每个集合中均以0为图像的索引序号基数,图像列表通常由大图标或位图构成,其中包含透明位图模式。
可以利用windows32位应用程序接口函数api来绘制、建立和删除图像,并能实现增加、删除、替换和拖动图像等操作。
图像列表控制提供了控制图像列表的基本方法,这些方法在windows95及以后版本才能实现。
2.1图像控制的对象结构
2.1.1图像控制的数据成员
m_himagelist
连接图像对象的控制句柄
2.1.2图像控制的建立方法
cimagelist&imagelist建立图像控制对象结构
初始化图像列表并绑定对象
图像控制的建立方法如下:
boolcreate(intcx,intcy,uintnflags,intninitial,intngrow);
boolcreate(uintnbitmapid,intcx,intngrow,colorrefcrmask);
boolcreate(lpctstrlpszbitmapid,intcx,intngrow,colorrefcrmask);
boolcreate(cimagelist&
imagelist1,intnimage1,cimagelist&
imagelist2
int
nimage2,intdx,intdy);
其中各项参数的含义为:
cx定义图像的宽度,单位为象素;
cy定义图象的高度,单位为象素;
nflags确定建立图像列表的类型,可以是以下值的组合:
ilc_color、ilc_color4、ilc_color8、ilc_color16、ilc_color24、ilc_color32、ilc_colorddb和ilc_mask;
ninitial用来确定图像列表包含的图像数量;
ngrow用来确定图像列表可控制的图像数量。
nbitmapid
用来确定图像列表联系的位图标志值;
crmask表示颜色屏蔽位;
lpszbitmapid用来确定包含位图资源的标识串;
imagelist1
指向图像列表控制对象的一个指针;
nimage1图像列表1中包含的图像数
量;
imagelist2指向图像列表控制对象的一个指针;
nimage2图像列表2中包含的图像数量;
dx表示以象素为单位的图像宽度;
dy表示以象素为单位的图像高度。
同样,图像控制的建立也包括两个步骤,首先建立图像列表结构,然后建立图像列表控制。
2.1.3图像控制的属性类
图像控制的属性类包括返回m_himagelist.控制句柄getsafehandle、取得图像列表中的图像数量getimagecount、设置图像列表的背景颜色setbkcolor、取得图像列表的背景颜色setbkcolor和取得图像的有关信息setbkcolor。
2.1.4图像控制的操作方法
图像控制的操作方法包括将一个图像列表绑定到一个对象上attach、将对象上的图像列表解除绑定并返回句柄detach、删除一个图像列表deleteimagelist、将一个图像增加到图像列表中add和将一个图像从图像列表中删除remove等。
2.2图像控制的应用技巧
对于图像控制,同样不能单独使用,必须与列表控制、树控制和标签控制相互结合应用,下面分别介绍其具体应用技巧。
2.2.1图像控制在列表控制中的应用技巧
2.2.1.1设置图像控制clistctrl:
setimagelist的调用格式如下:
cimagelist*setimagelist(cimagelist*pimagelist,intnimagelist);
其返回值是指向前一个图像列表控制的一个指针,如果不存在前一个图像列表则为null;
其中参数pimagelist是指向图像列表的标识,nimagelist是图像列表的类型,可以是如下值:
lvsil_normal
用大图标方式进行图像列表;
lvsil_small
用小图标方式进行图像列表;
lvsil_state
以图像状态进行图像列表;
2.2.1.2取得图像控制clis
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC 编写 ActiveX 控件 详解