在ATL ActiveX控件中嵌入WTL应用程序

时间:2010-04-06 07:04:09

标签: c++ activex atl openoffice.org wtl

有没有办法以某种方式在ATL ActiveX中嵌入一个WTL destop应用程序(即扩展名)?

我想要实现的是使用office文件Viewer创建ActiveX控件。 作为基础,我有一个桌面WTL应用程序(前一段时间写过),它使用OOo v3 API来显示文档。

  • 我创建了一个ActiveX项目,链接了必要的库并包含。
  • 我可以调用WTL和OO Api方法。
  • 添加了一些属性和方法以满足主机应用程序的要求。
  • 我的ActiveX在ie和主机应用程序中正确显示

在这里,我的运气(和知识?)结束了。

我的控件具有m_hwnd属性,但始终设置为0; 我用谷歌搜索了一下,发现我可以用

获得父母
this->m_spInPlaceSite->GetWindow()

但它也没有用。每次我想创建一个窗口运行时结束于IsWindow()方法(从ATL lib中调用)与parent == null

要创建并显示OOo :: DocWindow,我需要父窗口的HWND。

这就是问题所在:

我可以以某种方式在ActiveX中嵌入基于WTL窗口的应用程序,即扩展名吗? 是否可以不重写整个OOo Api包装器?

1 个答案:

答案 0 :(得分:1)

是的,你可以。

使用VS向导的步骤:

  1. 创建ATL项目
  2. 根据某些控件(例如按钮)添加ATL控件。在这种情况下,您将拥有带有一些处理程序的消息映射。
  3. 然后将CContainedWindow成员替换为您自己的窗口,这就是全部。

    ATL Samples page,我没有检查,但希望它有所帮助。