【问题标题】:Embed WTL App in ATL ActiveX control在 ATL ActiveX 控件中嵌入 WTL 应用程序
【发布时间】:2011-02-04 16:56:51
【问题描述】:

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

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

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

我的运气(和知识?)到此结束。

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

this->m_spInPlaceSite->GetWindow()

但它也不起作用。每次我想创建一个窗口运行时都以 IsWindow() 方法(从 ATL 库中调用)结束,parent==null

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

问题来了:

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

【问题讨论】:

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


    【解决方案1】:

    是的,你可以。

    VS 向导的步骤:

    1. 创建 ATL 项目
    2. 基于某些控件(例如按钮)添加 ATL 控件。在这种情况下,您将拥有带有一些处理程序的消息映射。

    然后将 CContainedWindow 成员替换为您自己的窗口即可。

    ATL Samples page,没查,希望对你有帮助。

    【讨论】:

    • 在编译过程中转换消息映射时仍然显示一些错误,但现在我知道要搜索什么。谢谢!
    猜你喜欢
    • 2011-12-16
    • 2012-09-23
    • 1970-01-01
    • 2011-07-27
    • 2012-04-24
    • 2011-04-04
    • 2014-12-11
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多