代码之家  ›  专栏  ›  技术社区  ›  Jeremiah Morrill

将hwnd gdi调用重定向到系统内存位图?

  •  1
  • Jeremiah Morrill  · 技术社区  · 15 年前

    我有一个第三方ActiveX控件,我想在其他表示技术(Direct3D和WPF)中呈现。为此,我需要ActiveX呈现到系统内存位图,而不是屏幕。我知道有办法做到这一点,但不确定从哪里开始。我不害怕做任何本地方法挂钩,但我不确定从哪里开始。我在想Beginpaint(…)可能是最热门的…

    有人做过这个吗,或者看到过漂浮在周围的例子/样本吗?

    顺便说一句,我不想做wm_打印类型的解决方案。我宁愿这段代码是反应性的,而不是主动的,强迫硬件重画。

    编辑:

    这两个答案对我来说都是正确的,所以我给了每个答案A+1。我希望有一个较低级别的解决方案,以便更灵活,但目前这已经足够好了。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Chris Becke    15 年前

    你的网站支持 IOleInPlaceSiteWindowless 接口?

    不幸的是,ActiveX控件中的无窗口支持是可选的。如果第三方接口确实支持它,则可以使用IViewObject::Draw将控件呈现到所需的任何曲面上。

        2
  •  3
  •   i_am_jorf    15 年前

    最好是看看ActiveX对象是否支持 IViewObject 打电话给 Draw() 方法将其呈现到您的DC中。

    如果对象不支持标准的OLE接口,您将很难让它正常工作。你将不得不采取一些邪恶的做法,比如重新编写dll的导入表来重定向bitblt()等。我已经做了这类事情。我不推荐。

    下一个问题是如何正确映射输入事件。