我要做一个activex控件,控件中有一打开按钮,可以打开一word文件,打开以后能显示在控件中,并且带有自己的菜单,是不是要用到ole技术?那位请赐教!

解决方案 »

  1.   

    1.找到WORD控件,该控件为*.ocx或 *.dll,寻找的方法可以是使用VB加入控件,在VB中会显示出
      这个控件的文件名,找到WORD的相应文件
    2.写一个容器或者使用ie等,将此文件以object形式加入。
      

  2.   

      OLE文档(这里就是WORD文档)和OLE服务器(你的控件)开发~~
      
      

  3.   

    这个问题问了很多遍了。http://expert.csdn.net/Expert/topic/1518/1518314.xml?temp=.9133417
      

  4.   

    在实现OLE对象的包容时,仅仅需要实现5个接口,如果更加苛刻一些,甚至可以只实现3个,我摘录一段我写的东西如下:
    ========================================
    做为OLE包容必须实现的接口有3个,分别是IOleClientSite、IAdviseSink、IOleInPlaceSite,以下分别来介绍。(由于每一个接口都是从IUnknown继承,因此IUnknown的方法实现在介绍时略去)IOleClientSite接口用来为OLE对象提供一个启动时的“站点”接口,主要用来为OLE对象提供窗口位置、用户界面、资源、名字服务的信息,OLE对象在启动时需要查询和调用这个接口来安排自身事务。每一个OLE对象都需要对应有一个IOleClientSite接口,因此如果在应用程序中同时启动多个OLE对象,他们必须共享或者独立拥有一个IOleClientSite接口。IOleClientSite包含了方法SaveObject、GetMoniker、GetContainer、ShowObject、OnShowWindow、RequestNewObjectLayout(关于具体的说明读者可以参看MSDN,在此不一一讨论,下同)。其中仅仅有SaveObject方法比较重要,需要实现,其他方法均可简单返回(返回S_OK值)或者声明为未实现(返回E_NOTIMPL值)。IAdviseSink接口用来使得包容可以在OLE对象的数据改变、试图改变、文档改变时有机会响应。需要注意的是,IAdviseSink接口的方法被OLE对象调用时都是同步的,因此如果包容在响应这些调用时耗费过长的时间(例如大规模的计算),会造成用户界面“僵死”现象。IAdviseSink包含了方法OnDataChange、OnViewChange、OnRename、OnSave、OnClose。实现时按照需要实现,甚至全部可以简单返回。另外一点需要注意的是,OLE对象不会主动的获取包容的IAdviseSink接口,因此我们必须通过在创建OLE对象后,调用OLE对象IOleObject接口的Advise方法来向对象“注册”这个接口。IOleInPlaceSite接口从IOleWindow接口继承而来,用来在OLE包容和OLE对象之间维持一种互相联系,例如OLE对象可以从OLE包容获得上下文窗口位置的信息,OLE包容也可以在OLE对象实地激活时获得通知以做出相应的安排。IOleInPlaceSite包含了方法GetWindow、ContextSensitiveHelp(这两个方法是从IOleWindow继承而来)、IOleInPlaceSite、CanInPlaceActivate、OnInPlaceActivate OnUIActivate、GetWindowContext、Scroll、OnUIDeactivate、OnInPlaceDeactivate、DiscardUndoState、DeactivateAndUndo、OnPosRectChange。一般而言,比较重要的是:GetWindowContext,OLE对象可以在此获得OLE包容的一些设定信息,以作自身响应;GetWindow,OLE对象需要在这里获得母窗口句柄;OnUIActive、OnUIDeactive、OnInPlaceActive、OnInPlaceDeactive、DeactiveAndUndo,这些都是OLE对象在试图变化时的一些通知函数,OLE包容需要在这时为OLE对象安排好诸如菜单等等资源的协调,以及调用OLE对象做复合文档的永久化、回复等等,都是比较简单的实现。其他的接口函数均可按需要实现,否则简单返回即可。以上就是实现OLE包容必须实现的三个接口,而且不是所有的接口都必须完全实现,依靠现在这些知识我们已经可以自行实现一个简单的包容器了。但是这时还仅仅是最简单的实现,我们还不能安排OLE对象的实地激活,OLE对象的菜单工具条插入,我们还需要讨论两个接口来完善我们的OLE包容器。注意的一点,这并不是必须的,尤其是在实现某些轻量级的OLE包容时。第一个接口是IOleInPlaceFrame,这个接口是做为OLE包容器最高层框架窗口实现的一个接口,用来在框架窗口中合并OLE对象的菜单、工具条,显示OLE对象状态,并可以向OLE包容传递键盘消息,再由OLE包容向OLE对象传送,以实现某些热键。IOleInPlaceFrame同时继承了IOleInPlaceUIWindow接口,IOleInPlaceUIWindow接口又继承了IOleWindow接口,因此实际上我们在实现这个接口时需要实现4个接口的方法(包含IUnknown)。这些方法是:GetWindow、ContextSensitiveHelp、GetBorder、RequestBorderSpace、SetBorderSpace、 SetActiveObject、InsertMenus、SetMenu、RemoveMenus、SetStatusText、EnableModeless 、TranslateAccelerator(未包含IUnknown的三个方法)。实现时同样不比完全实现,按照需要实现就可以了,不实现的或者简单返回,或者返回未实现。在本文后面的例子中,选择实现了ContextSensitiveHelp(安排OLE对象显示右键菜单)、GetBorder(安排OLE对象获得母窗口的边界)、SetBorderSpace(安排OLE对象的边界)、SetActiveObject(为母窗口记录下激活的OLE对象)、InsertMenus(合并菜单)、SetMenu (设置菜单)、RemoveMenus(消除菜单)、TranslateAccelerator(向OLE对象传递热键)。第二个接口是IOleDocumentSite,这个接口是的OLE中的复合文档对象可以被实地激活,然后显示工具条,标尺之类的用户界面元素。这个接口仅有一个方法ActivateMe,但是却十分重要。ActiveMe接受一个参数IOleDocumentView *pView,这个参数是欲激活的OLE对象的接口,我们可以借此接口查询到OLE对象的IOleDocument接口,然后调用其方法CreateView建立起OLE对象自身的视图,接下来调用IOleDocumentView的方法SetInPlaceSite向OLE对象“注册”OLE包容的IOleInPlaceSite接口。接下来顺次调用IOleDocumentView的UIAcitve、SetRect、Show三个方法激活用户界面元素、安排好OLE视图位置、最后使之显示出来。
      

  5.   

    我做过这个......
    http://lovexing.myrice.com/