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(名字)。 |
|