配色: 字号:
ActiveX控件制作
2012-08-06 | 阅:  转:  |  分享 
  
ActiveX控件制作在系统开发过程中,控件的使用可以有效的帮助程序的开发,但是系统提供的控件不能满足用户的所以要求。于是我们可以开发满足
自己要求的Activx控件。下面介绍一个简单ACtivx控件的制作1,新建MFCActivxcontrolwizard
工程,名为MyClock,选择创建空的工程。生成的控件有3个类和2个接口。应用程序类:CMyclockApp主窗口类:CMyc
lockCtrl对话框类,显示控件属性页CMyclockPropPage接口是外部调用控件功能的函数集合,一
些纯虚函数,在主窗口类中进行实现运行时选择下面的方式:控件是无法独立运行,必须使用容器来测试控件。查看其方法和属性
页:方法只有aboutBox,属性页为空。下面学习添加属性和方法。控件注册与注销控件必须注册才可以使用。在glo
bals中有注册函数DllRegisterServer和注销函数DllUnregisterServer。Vc++编译控件时,最后
对ACtivx控件调用全局函数进行注册。可以手动注册:开始->运行->regsvr32E:\Clock.ocx或者v
c++->tool->registercontrol控件注销,使用regsvr32程序,regsvr32/uE:\C
lock.ocx注销默认生成的控件功能是在CMyclockCtrl::ondraw中画一个椭圆。可以修改为下面时间函数CT
imetime=CTime::GetCurrentTime(); if(0==time.GetSecond()) { F
ireNewMinute(); } CStringstr=time.Format("%H:%M:%S"); pdc->Te
xtOut(0,0,str);得到时间时静止的,可以设置一个时钟函数,更新时间添加常用属性页MFC提供了三个与Activ
eX控件一起使用的常用属性页:CLSID_CColorPropPage、CLSID_CFontPropPage和CLSID_
CPicturePropPage。这些页分别显示常用颜色、字体和图片属性的用户界面。添加:在MyclockCtl.cpp中找到
BEGIN_PROPPAGEIDS(CSampleCtrl,4)PROPPAGEID(CMyPropPage::
guid)PROPPAGEID(CLSID_CFontPropPage)PROPPAGEID(CLSID_
CColorPropPage)PROPPAGEID(CLSID_CPicturePropPage)END_PROPP
AGEIDS(CSampleCtrl)请注意,BEGIN_PROPPAGEIDS宏中的属性页数为4。它表示ActiveX
控件支持的属性页数。注意???如果不能访问控件常用属性页,可能是因为没有在当前的操作系统中正确地注册MFCDLL(MFC
xx.DLL)。导致这种情况的原因通常是安装了VisualC++和。Net多个MFC库,如果常用属性页不可见通过在命令行中
用DLL的完整路径名运行RegSvr32.exe来注册DLL。。添加自定义属性页如果系统提供一个自定义属性页
不够用。则按以下步骤添加:1.ActiveX工程中,资源视图中“Dialog”节点,添加Dialog并选择IDD_OLE_PR
OPPAGE_SMALL。并修改其名字。2.在类向导中,添加新类,注意其基类和dialogID(选择你新建的对话框).3程序
中添加:程序中有个属性页表添加头文件#include"classname.h"修改属性表BEGIN_PROPPAGEI
DS(CClockCtrl,4)PROPPAGEID(CClockPropPage::guid)PROPPAGEID
(CLSID_CColorPropPage)PROPPAGEID(newPropPage::guid)PROPPA
GEID(classname::guid)END_PROPPAGEIDS(CClockCtrl)改变其总数,并将新建的属性
页其加入4.完善属性页二.设置自定义属性页的名字在资源的stringtable中添加两个string一个是新建属性页的
标题,一个是新建属性页的名字。(在字符表中修改后,必须在程序中对应位置修改)在这个属性页类的构造函数由newProp
Page::newPropPage(): COlePropertyPage(IDD,0)改为:newPropPage::ne
wPropPage(): COlePropertyPage(IDD,IDS_new_CAPTION)结果出现错误:4.错
误是没定义标题,出现空指针。再定义一个标题:IDS_VIDEO_Camerapara(options标题)BOOLCcame
raparam::CcameraparamFactory::UpdateRegistry(BOOLbRegister){
if(bRegister) returnAfxOleRegisterPropertyPageClass(AfxGetI
nstanceHandle(), m_clsid,IDS_VIDEO_Camerapara); else return
AfxOleUnregisterClass(m_clsid,NULL);}三.属性页控件变量关联到属性1.在项目类中添加一
个属性propname(名字中不要有下划线)。错误:InvalidOLEexternalname:prop_name。是
因为名字不符合规则2.打开资源->对话框,对要关联的控件添加变量,注意:在Optionalpropertyname中选择要关联的属性变量名。如果没有该选项,直接输入其名字也一样。我们先定义个设置的值是IDS_Camera_IP_CAPTION(名字)。
献花(0)
+1
(本文系小云蔡首藏)