查看文章 |
刚做完一个用VC做ActiveX控件的练习,现总结一下: 一。稍作界面(当然如果是以界面为主要元素的话,就不是稍作了)。主要是在Ctrl 类的OnDraw函数中。 二。添加属性。可以通过ClassWizard里的Automation建立。 1。属性分为stock,Member Variable,Get/Set methods三类。stock表示是系统 自带的包括BackColor,Text等,Member Variable表示创建一个成员变量作为存储该 属性并由一个change函数标示其变化。而Get/Set模式则创建两个变化函数,将赋值和 读取分开来。 2。建立属性之后,要保存属性的状态(用PX_Short函数,其中short是类型如果 是Long型就用PX_Long)(将此函数置于Ctrl类的DoPropExchange响应中)。 3。然后通知容器属性已发生改变,使其更新(使用BoundPropertyChanged函数) 。 4。如果想将此属性加入到属性页。可在BEGIN_PROPPAGEIDS和END_PROPPAGEIDS之 间设置(位于Ctrl.cpp中)。 三。添加方法。和添加属性一样,也可通过ClassWizard里的Automation建立。 1。方法和属性类似。也分为stock和custom类型,前者是系统自带,后者为自定 义。 2。方法的内部函数名和外部接口名不一定完全一样。 四。添加事件。可以通过ClassWizard里的ActiveX Events建立。 1。同理也分为stock和custom两类。 2。内部函数名称和对外接口一般是不一样的对外接口为XXX的话一般内部函数为 fireXXX。 3。事件的特征注定了其没有函数主体。只有一个声明。因为其主体响应部分是在 容器中。在这里可以把它当作一个纯虚函数来对待。 四。其他: 1。标示控件是在设计状态还是运行状态的函数:AmbientUserMode()设计状态返 回FALSE,运行状态返回TRUE。 2。设置BackColor和ForeColor等属性时,只会设置其变量存储值,不会立即表现 在界面上,还需要手工调用GetBackColor取得该存储值,然后用CDC的FillRect修改背 景色。ForeColor同理。 3。注意GetBackColor和GetBkColor的区别,前者取得属性的设置值(不是当前背 景色),后者返回文本区域的背景色(只是文本的底色,不是整个区域的颜色)。 4。GetBackColor的返回值为OLE_COLOR类型,而CBrush类要求COLORREF类型,可 用TranslateColor函数进行转换。
|

