ActiveX控件制作在系统开发过程中,控件的使用可以有效的帮助程序的开发,但是系统提供的控件不能满足用户的所以要求。于是我们可以开发满足自己要求的Activx控件。下面介绍一个简单ACtivx控件的制作1,新建MFCActivxcontrolwizard工程,名为MyClock,选择创建空的工程。生成的控件有3个类和2个接口。应用程序类:CMyclockApp主窗口类:CMyclockCtrl对话框类,显示控件属性页CMyclockPropPage接口是外部调用控件功能的函数集合,一些纯虚函数,在主窗口类中进行实现运行时选择下面的方式:控件是无法独立运行,必须使用容器来测试控件。查看其方法和属性页:方法只有aboutBox,属性页为空。下面学习添加属性和方法。控件注册与注销控件必须注册才可以使用。在globals中有注册函数DllRegisterServer和注销函数DllUnregisterServer。Vc++编译控件时,最后对ACtivx控件调用全局函数进行注册。可以手动注册:开始-运行-regsvr32E:\Clock.ocx或者vc++-tool-registercontrol控件注销,使用regsvr32程序,regsvr32/uE:\Clock.ocx注销默认生成的控件功能是在CMyclockCtrl::ondraw中画一个椭圆。可以修改为下面时间函数CTimetime=CTime::GetCurrentTime();if(0==time.GetSecond()){FireNewMinute();}CStringstr=time.Format(%H:%M:%S);pdc-TextOut(0,0,str);得到时间时静止的,可以设置一个时钟函数,更新时间添加常用属性页MFC提供了三个与ActiveX控件一起使用的常用属性页: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_PROPPAGEIDS(CSampleCtrl)请注意,BEGIN_PROPPAGEIDS宏中的属性页数为4。它表示ActiveX控件支持的属性页数。注意如果不能访问控件常用属性页,可能是因为没有在当前的操作系统中正确地注册MFCDLL(MFCxx.DLL)。导致这种情况的原因通常是安装了VisualC++和。Net多个MFC库,如果常用属性页不可见通过在命令行中用DLL的完整路径名运行RegSvr32.exe来注册DLL。。添加自定义属性页如果系统提供一个自定义属性页不够用。则按以下步骤添加:1.ActiveX工程中,资源视图中“Dialog”节点,添加Dialog并选择IDD_OLE_PROPPAGE_SMALL。并修改其名字。2.在类向导中,添加新类,注意其基类和dialogID(选择你新建的对话框).3程序中添加:程序中有个属性页表添加头文件#includeclassname.h修改属性表BEGIN_PROPPAGEIDS(CClockCtrl,4)PROPPAGEID(CClockPropPage::guid)PROPPAGEID(CLSID_CColorPropPage)PROPPAGEID(newPropPage::guid)PROPPAGEID(classname::guid)END_PROPPAGEIDS(CClockCtrl)改变其总数,并将新建的属性页其加入4.完善属性页二.设置自定义属性页的名字在资源的stringtable中添加两个string一个是新建属性页的标题,一个是新建属性页的名字。(在字符表中修改后,必须在程序中对应位置修改)我们先定义个设置的值是IDS_Camera_IP_CAPTION(名字)。在这个属性页类的构造函数由newPropPage::newPropPage():COlePropertyPage(IDD,0)改为:newPropPage::newPropPage():COlePropertyPage(IDD,IDS_new_CAPTION)结果出现错误:4.错误是没定义标题,出现空指针。再定义一个标题:IDS_VIDEO_Camerapara(options标题)BOOLCcameraparam::CcameraparamFactory::UpdateRegistry(BOOLbRegister){if(bRegister)returnAfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),m_clsid,IDS_VIDEO_Camerapara);elsereturnAfxOleUnregisterClass(m_clsid,NULL);}三.属性页控件变量关联到属性1.在项目类中添加一个属性propname(名字中不要有下划线)。错误:InvalidOLEexternalname:prop_name。是因为名字不符合规则2.打开资源-对话框,对要关联的控件添加变量,注意:在Optionalpropertyname中选择要关联的属性变量名。如果没有该选项,直接输入其名字也一样。