您的位置:程序门 -> vc/mfc -> atl/activex/com



用mfc写的activex控件如何实现对象模型,就像excel、word那样。没有人会吗?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


用mfc写的activex控件如何实现对象模型,就像excel、word那样。没有人会吗?[已结贴,结贴人:yrb]
发表于:2007-04-24 18:10:19 楼主
excel可以包括workbooks,worksheets等对象,我们用mfc写的控件如何做,才能实现这样的功能。
发表于:2007-04-24 20:19:221楼 得分:10
直接用ole的方法,调用excel或word不好吗
发表于:2007-04-24 21:38:292楼 得分:10
你是要实现word/excel里的操作,还是仅仅用mfc做出com组件?
发表于:2007-04-24 22:07:323楼 得分:0
用mfc开发activex控件,实现类似excel那样的组件对象模型。
发表于:2007-04-25 05:06:384楼 得分:35
support.microsoft.com/kb/168214
发表于:2007-04-25 08:43:515楼 得分:10
我觉得,用vb.net做最合适,其次是vc.net。
发表于:2007-04-25 17:29:196楼 得分:0
先谢谢jiangsheng(蒋晟.net[mvp])兄,我慢慢学习。
半瓶子水的人,做点东西真难,再加上自己苛求自己。
我本是一个delphi程序员,用delphi写了一个grid控件(vcl),总感觉delphi做的不是很好,用mfc重写,以前学习过vc。基本重写完成了(http://www.yfsoft.cn/soft/yfgrid.rar),却发现和脚本语言的互动上出现了问题,以前我不知道脚本语言不支持出接口。当然,我可以选择cell那样的做法,专门提供一些接口给脚本语言,追求完美的性格促使我用组件对象模型的方法为这个grid提供一个立体的接口。想当然的从ccmdtarget派生了几个类,做出了接口对象模型。可是这个grid控件(debug)在ie中运行时,总是断言错误,   在下面这个帖子里有详细的错误描述:http://community.csdn.net/expert/topic/5478/5478434.xml?temp=.1031。我跟踪后,发现基于mfc的activex控件如果在vb、delphi等环境开发的程序中运行时,只有一个窗口afxolecontrolx,如果在ie中运行时却多出一个窗口afxwndx,这个多出来的窗口背后是一个creflectorwnd类的实例。这些都不要紧,要紧的是如果在这个activex控件中增加一个从ccmdtarget派生的类后,再在ie中运行的时候就在wincore.cpp中的afxwndproc函数中出现assert错误,我对引发这个错误的原因进行了探索,发现,如果没有加ccmdtarget的派生类,在ie关闭的时候,发给这个activex的控件的消息是wm_endsession,如果增加了,在这个消息的后面还发送一个wm_destroy消息,正是这个消息,引发了上诉错误。我猜想,在wm_endsession消息中,已经将控件类的对象销毁了,后一个消息来的时候,函数fromhandlepermanent(hwnd)已经无法返回这个窗口对象了,出现了错误。能力有限啊,无法对mfc的源码进行分析。
发表于:2007-04-25 22:41:097楼 得分:35
你说的是com的继承和包容、聚合的问题吧!其实,就是面向对象思想而已,换了种说法而已!
发表于:2007-04-25 22:58:128楼 得分:0
可能是我没有表达清楚。这个我觉得不是包容或聚合。因为包容或聚合多数是指一个com组件包含另一个已经存在的com组件,而我是要给一个基于mfc的activex控件实现若干个接口,这些接口之间存在着层次关系,不是简单的并列。比方接口ia,包含一个返回接口ib的方法,接口ib包含一个返回接口ic的方法。
发表于:2007-04-26 09:42:529楼 得分:0
继承吧!很简单的,跟c++差不多一个意思!
先写个接口a,弄几个方法和函数,再写个接口b;
编译一下,在b的类上右键选择implement   interface,就会要你选择继承哪个接口的!
我不知道我说得对不对!
说实话,即使我说的不对,这个东西很有用的。做过arcengine的工具(itool)开发就知道它可以用来做很多方便的应用!
发表于:2007-04-26 11:32:4210楼 得分:0
该回复于2007-12-28 17:14:05被管理员或版主删除
发表于:2007-04-26 14:47:3311楼 得分:0
谢谢各位的帮助!!!
问题可能已经解决了,或者说原本就没有问题,庸人自扰。
帖子http://community.csdn.net/expert/topic/5478/5478434.xml?temp=.1031
里描述我的那个做法应该是正确的,至少实现了我的目标。
在我的台式机和笔记本上同时出错让没有从本质上掌握com技术的我误以为存在这个问题。
可能是我的系统里安装的软件对ie有干扰导致了这个本不该出现的错误。我的笔记本和台式机里面安装的软件基本上一样。
今天我在一家单位的若干台xp的机器上测试,没有任何错误。
再找几台2000的机器测一下就能最终确定了。
再次谢谢各位的帮助,尤其是jiangsheng(蒋晟.net[mvp])   和jxufeng(玉龙猪)   !


快速检索

最新资讯
热门点击