代码改变世界

在VC中添加控件的包装类

2011-04-24 23:55  愤怒的青蛙  阅读(3076)  评论(1编辑  收藏  举报

参考资料:http://topic.csdn.net/t/20050408/22/3921413.html4楼

今天写VC的程序,希望使用EXCEL表格控件,也就是Microsoft的Spreadsheet空间,开发环境是VS2010(经试验,在VS2008中也适用),当添加改控件的包装类时,发现他不像VC6.0中可以自动添加,去网上搜了一下,方法大概有两个:

以Microsoft Chart Control , version 6.0 (OLEDB)这个控件为例,添加步骤是:

以下参考资料:http://topic.csdn.net/u/20100621/00/1a368d9d-f186-49d5-851c-02fae72ded7f.html

第一种方法:

(使用这种方法注意,一定不要选中任何空间或者资源,如对话框或者菜单项,我一开始就是这里搞错了,结果一直出不来,搞的我有撞墙的欲望)

菜单项目-> 添加类->选择ActiveX控件中的MFC类->弹出“从ActiveX控件添加类向导”对话框
-> 选择从文件添加类->选择路径“C:\windows\system32\mschrt20.ocx”(mschrt20.ocx是这个控件的文件)
->点击“>>”按钮添加所有接口(会弹出提示对话框说_DMSChartEvent这个接口找不到coclass)
->点击完成
->查看类视图,发现添加了许多类,其中的CDMSChart是最主要的类
第二种方法:
->在项目中随便创建一个对话框资源
->在对话框中右键->“插入ActiveX控件”->选择Microsoft Chart Control , version 6.0 (OLEDB)
(也可以在工具箱面板上右键->“选择项”->在弹出对话框中单击“COM组建”选项卡->找到Microsoft Chart Control , version 6.0 (OLEDB)打上复选标记确定->控件图标被添加到工具箱面板上可以直接拖放到对话框上)
->在对话框上右键这个控件->“添加变量”为对话框创建一个空间变量->IDL会自动创建此控件的包装类,CDMSChart.h和CDMSChart.cpp文件。

经过尝试,发现使用这两种方法添加的都有问题,那就是添加的类的.h和.cpp文件都似乎是最初的接口文件,使用很不方便,另外,有一些控件需要添加不知一个类,但是使用这种方法无法完成,后来无意中浏览到CSDN论坛,就是文章最初提到的那个参考资料,发现了一个解决方法,那就是在使用第一种方法添加包装类时,不要使用从注册表的方法,要使用从文件添加,比如Spreadsheet包装类时选从文件C:\Program   Files\Common   Files\Microsoft   Shared\Web   Components\10\OWC10.dll ,这是会出现多个类,CRange源自_Range,   CSpreadSheet源自ISpreadSheet ,这样就可以添加多个控制类。

这样看来,微软貌似将一个简单的事情复杂化了,这不知道他是怎么想的。