OCX控件包装类的生成
来源:互联网 发布:ubuntu 14.04 qq 2015 编辑:程序博客网 时间:2024/06/05 09:50
本人也是位学习孙鑫的VC++深入详解的初学者,在学到ActiveX控件章节时,遇到非常多的麻烦。浏览过各种各样的帖子,终于在摸索中找到了答案。楼主可以听听我的解法。
第一步:在“解决方案管理器”中,选中项目名称“CVTest”(我命名为CVTest,用来调试前面编写的Cliok控件),右键->添加->类。在打开的添加类对话框中,选中“Active控件中的MFC类”->添加。在打开的向导中,以注册表为来源,找到Clock control控件。用下面的“_DClock”接口生成相应的类“CDClock”。完成添加。
这时可以看到在头文件中已经有了“CDClock.h”,里面写着“由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明”,并且还派生于CWnd类,拥有Create函数。乍一看,以为添加成功,后来发现,里面只有两个函数:“AboutBox()”和“Hello()”。我的理解是:它只包含我们在Clock控件中添加的显性的方法,也就是指,可以由自己添加几行代码就可以完成的方法,不需要MFC内部机制完成。总之,这是个极不完整的控件类,需要继续添加原控件方法、属性、事件。
第二步:仍然是同第一步的方法,打开添加类的对话框。这次选择添加“TypeLib中的MFC类”,找到Clock control控件。可以发现这次的接口有两个“_DClock”和“_DClockEvents”。把它们的类都添加上,由于第一步已经有一个“CDClock.h”了,所以它新生成的类为“CDClock0.h”,“CDClockEvents.h”。
我们也打开这两个类,发现它们就包含了其他的方法和属性等。但是,一个控件怎么会生成这么多类呢?肯定有问题。通过比较,发现CDClockEvents和CDClock0类都派生于COleDispatchDriver这个类,并且都是调用父类的InvokeHelper()函数实现自己的方法。由此,我们可以淡定的把CDClockEvents类中的成员函数Click()和NewMinute(),都复制到CDClock0类中,然后直接删掉“CDClockEvents.h”。如此,就简化掉一个类。
继续分析CDClock类和CDClock0类,发现CDClock类虽然派生于CWnd,但通过GetClsid()函数,得到了控件中的CLSID,也就是用这个函数也能关联到COleDispatchDriver这个类上去(个人形象的理解,真正的机理我也不懂)。并且通过MSDN查InvokeHelper()函数,发现CWnd和COleDispatchDriver类都有这个函数,都用它实现了AboutBox()和Hello()。那么我们就可以断定CDClock类和CDClock0类的成员函数(方法)多半是可以相互移植的。
第三步:把CDClock0类中的函数复制到CDClock类中去,再删掉“CDClock0.h”。
最后:调试运行,无误;把孙鑫那剩下的代码写完,再运行,成功!
感叹一下,用VS2008去学VC6.0的人,真是伤不起啊!!!
第一步:在“解决方案管理器”中,选中项目名称“CVTest”(我命名为CVTest,用来调试前面编写的Cliok控件),右键->添加->类。在打开的添加类对话框中,选中“Active控件中的MFC类”->添加。在打开的向导中,以注册表为来源,找到Clock control控件。用下面的“_DClock”接口生成相应的类“CDClock”。完成添加。
这时可以看到在头文件中已经有了“CDClock.h”,里面写着“由 Microsoft Visual C++ 创建的 ActiveX 控件包装类的声明”,并且还派生于CWnd类,拥有Create函数。乍一看,以为添加成功,后来发现,里面只有两个函数:“AboutBox()”和“Hello()”。我的理解是:它只包含我们在Clock控件中添加的显性的方法,也就是指,可以由自己添加几行代码就可以完成的方法,不需要MFC内部机制完成。总之,这是个极不完整的控件类,需要继续添加原控件方法、属性、事件。
第二步:仍然是同第一步的方法,打开添加类的对话框。这次选择添加“TypeLib中的MFC类”,找到Clock control控件。可以发现这次的接口有两个“_DClock”和“_DClockEvents”。把它们的类都添加上,由于第一步已经有一个“CDClock.h”了,所以它新生成的类为“CDClock0.h”,“CDClockEvents.h”。
我们也打开这两个类,发现它们就包含了其他的方法和属性等。但是,一个控件怎么会生成这么多类呢?肯定有问题。通过比较,发现CDClockEvents和CDClock0类都派生于COleDispatchDriver这个类,并且都是调用父类的InvokeHelper()函数实现自己的方法。由此,我们可以淡定的把CDClockEvents类中的成员函数Click()和NewMinute(),都复制到CDClock0类中,然后直接删掉“CDClockEvents.h”。如此,就简化掉一个类。
继续分析CDClock类和CDClock0类,发现CDClock类虽然派生于CWnd,但通过GetClsid()函数,得到了控件中的CLSID,也就是用这个函数也能关联到COleDispatchDriver这个类上去(个人形象的理解,真正的机理我也不懂)。并且通过MSDN查InvokeHelper()函数,发现CWnd和COleDispatchDriver类都有这个函数,都用它实现了AboutBox()和Hello()。那么我们就可以断定CDClock类和CDClock0类的成员函数(方法)多半是可以相互移植的。
第三步:把CDClock0类中的函数复制到CDClock类中去,再删掉“CDClock0.h”。
最后:调试运行,无误;把孙鑫那剩下的代码写完,再运行,成功!
感叹一下,用VS2008去学VC6.0的人,真是伤不起啊!!!
0 0
- OCX控件包装类的生成
- VC++2008如何生成OCX控件包装类
- VC6.0生成ActiveX控件的包装类
- vs2008生成的ocx控件的classid查看
- 用MFC ActiveX Control Wizard生成的OCX控件
- ocx控件的注册
- AcitveX生成包装类,当控件接口改变时,如何重新生成包装类?
- VS2008添加ActiveX控件并且生成其包装类
- HTML页面表单控件的包装类
- OCX控件的两则小经验
- 带窗体的OCX控件
- 查看ocx控件的ClassId
- 载入mfc生成的ocx
- win10下msadodc.ocx、mscomm32.ocx、MSDATLST.ocx等OCX控件的安装注册方法步骤
- 关于调用C#生成的OCX控件异常问题的解决
- 在vs2008下的MFC(ActiveX)工程怎么生成ocx控件
- OCX控件避免弹出安全警告的类
- OCX和DLL的区别--OCX控件的应用
- Android回顾之静默安装
- Android的framework层音量控制原理分析--hot(key)处理
- 好文分享
- 解析Obj-C中的assgin,copy,retain关键字的含义。
- 七(7.6 ) 线程的执行时间
- OCX控件包装类的生成
- 使用TabHost实现卡片选项菜单
- 抑郁症患者的陈述
- 解决WordPress主题缺少style.css无法安装的方法
- Eclipse下NDK开发(java调用so文件)
- Linux下spi驱动开发
- 深入了解信号槽
- Android程序员必备精品资源
- 解析XML文件