说明
ActiveX控件有三个要素:属性, 方法, 事件
①属性
比如Button控件的显示文字,名字等。
属性值包括Stock属性和Custom属性,其中Stock属性为控件固有属性,即MFC封装的属性,例如前景色 / 背景色等。
而Custom属性则为用户自己定制的属性,在添加Custom属性时要指定外部名字,即使用者看到的该控件的属性名字;
还要指定内部名字,即控件开发人员在开发控件时使用的名字,通常为一个成员变量(及其类型),用来记录属性值。
需要注意的一点:当用户使用控件时,设定了某个属性的值,关闭下次打开时,在使用者的环境里,Stock属性自动保持上次打开的值,
而Custom属性就要设定其持久性,在MFC中,通过COleControl类的以PX_开头的成员函数设定其持久性,具体选择哪个根据该属性
的类型来定。
②方法
方法也分为Stock方法和Custom方法。
Stock方法不可编辑,添加完以后不能再编写。
Custom方法要指定外部名字,即给使用人员看的名字;内部名字,即控件开发人员看的名字,添加完后即可开始编写该函数的代码。
添加Custom方法可以指定该函数的返回值,参数s。
③事件
事件和方法的不同之处在于:事件是控件开发人员仅仅声明该事件,而事件(Custom)的具体实现代码要由控件使用者完成。
同样,事件也分为Stock事件和Custom事件。
Stock事件仅可以添加,不可以指定内部名字 / 外部名字 / 参数s。
Custom事件添加时还可以指定外部名字,内部名字以及参数s。
Stock事件由于是MFC封装的事件,因此在使用人员只管调用该事件即可,该事件的代码已经由MFC完成。
Custom事件则不光要由使用人员完成事件代码,而且控件开发人员还要在开发时指定该事件的调用时机,即显示地调用该事件。
使用控件
在VC6中使用该控件为例,新建一个基于对话框的MFC应用程序,在对话框上右键->插入控件,选择该控件即可插入。
如果是用菜单 “工程->增加到工程->组件和控件 ” 添加控件,在添加了该控件的同时,还会自动添加一个控件类,用此控件类使用人员便可以像动态创建按钮那样动态创建控件。
几个函数
①TranslateColor
COLORREF COleControl::TranslateColor(OLE_COLOR clrColor, HPALETTE hpal = NULL);
功能:把一个OLE_COLOR类型转换为COLORREF类型
②PX_开头的函数
eg.
BOOL PX_Short(CPorpExchange* pPX, LPCTSTR pszPropName, short& sValue);
函数功能:用来保持Short类型的属性值的持久性。
③InvalidateControl
void COleControl::InvalidateControl(LPCRECT lpRect = NULL);
函数功能:使控件无效重绘,此时会调用控件类的OnDraw()函数。
④AmbientUserMode
BOOL COleControl::AmbientUserMode();
函数功能:获得当前控件的容器是在设计模式还是在运行模式,设计模式返回0,运行模式返回非0。
⑤BoundPropertyChanged
void COleControl::BoundPropertyChanged(DISPID dispid);
函数功能:对于Custom属性,通知容器某该类型属性的值发生变化了,要让容器中该属性值也随之变化,每次改变都要通知。
补充
关于如何用VC6创建ActiveX控件,可见此篇文章http://apps.hi.baidu.com/share/detail/35749885