【问题标题】:GDI rendering to WPF windowGDI 渲染到 WPF 窗口
【发布时间】:2011-06-21 14:20:10
【问题描述】:

我已经进行了一些搜索,但我找不到确切的答案。在我的 C# WPF 应用程序中,我获取 HWND 指针并将其传递给 C dll。然后该 C dll 尝试使用 GDI 调用在我的窗口上呈现各种覆盖。没有错误,但什么也没有出现。如果我切换到 Windows 窗体,则 dll 可以很好地渲染它。如果我托管一个 WindowsFormHost 控件并从那里使用 hwnd,我会有同样的效果。我已经看到有关 HwndHost 控件的信息,但它看起来并不像我想要的那样。也许对这种控制有更多了解的人可以告诉我不同​​的说法。我在某处读到用于 DirectX 渲染(如 WPF)的 hwnd 也不能使用 GDI。这是否使我的情况变得不可能?我可以通过在 WPF 窗口上覆盖一个无边框的表单来伪造它,但显然这不会太漂亮。有什么想法或想法吗?

【问题讨论】:

    标签: wpf gdi hwnd


    【解决方案1】:

    您不能将 WPF 和 GDI 渲染到同一个 hwnd,但您可以轻松地在 WPF 应用程序中创建一个子 hwnd 并让 GDI 渲染到其中。看看 HwndHost 就是这样做的。 this article 中的“在 WPF 中托管 Microsoft Win32 窗口”部分提供了更多详细信息。它还讨论了在执行此类互操作时会遇到的各种问题(例如空域)。

    【讨论】:

    • 感谢您的回复!我遇到了这个,但它看起来不像我想要的。我实际上没有任何东西可以托管。我只想要一个“干净的”hwnd 交给 GDI 渲染 dll。可悲的是,我还需要能够将鼠标向上/向下传递给 WPF,但这对于渲染来说是次要的。你能给我一些指导吗?
    • 您需要一个 HWND,这就是 HwndHost 所承载的。处理 WM_PAINT,获取设备上下文并开始绘图。
    猜你喜欢
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 2019-10-21
    • 1970-01-01
    相关资源
    最近更新 更多