【问题标题】:Hosting a Win32 window in a WPF floating tear off tab在 WPF 浮动撕下选项卡中托管 Win32 窗口
【发布时间】:2012-05-11 03:12:56
【问题描述】:

我目前在 WPF 中托管一个 Win32 OSG(基于 OpenGL)控件。我正在使用 Telerik 对接库。当窗格与 MainWindow 对接时,一切正常。但是,当我撕下标签时,不会在撕下标签中重新创建 OSG 图形

我正在继承 HwndHost,它使用 CreateWindowEx 创建本机 Win32 主机并返回本机句柄(请参见下面的代码)。然后我将该句柄传递给由用户控件托管的本机 OSG 代码。

    // inside my ControlHost class which derives from HwndHost
    protected override HandleRef BuildWindowCore(HandleRef hwndParent)
    {
        hwndControl = IntPtr.Zero;
        hwndHost = IntPtr.Zero;

        hwndHost = CreateWindowEx(0, "MDIClient", "",
                                  WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,
                                  0, 0,
                                  hostHeight, hostWidth,
                                  hwndParent.Handle,
                                  (IntPtr)HOST_ID,
                                  IntPtr.Zero,
                                  0);
        return new HandleRef(this, hwndHost);
    }

When debugging into the above method, as expected, the hwndParent.handle parameter is the handle of the WPF MainWindow when the tab is docked in the Main window.但是,当我将选项卡拉出并变成浮动选项卡时,hwndParent.handle 属性是我无法使用 Spy++ 找到的值。根据 Spy++ 的浮动标签“hwnd”值与上述方法产生的值相同。我怀疑这可能是 OSG 图形不显示的原因。

我的问题是:

  1. 我知道 WPF 本身只有一个与每个 Window 对象关联的 HWND,但是这如何与停靠库中的浮动面板一起工作?浮动面板实际上是作为底层对象的窗口还是用户控件?

  2. 任何想法为什么我的本地 OSG 图形没有显示在浮动撕下选项卡上?是否与传入的父句柄有关?

【问题讨论】:

  • 您能否分享一下您如何将 Win32 与 WPF 集成的示例代码?

标签: c# wpf winapi


【解决方案1】:

RadDocking 控件默认使用透明的 WPF 窗口来显示其 ToolWindows,作为 WPF 的平台限制,您不能在此类透明窗口中显示任何非 WPF 内容。您可以做的是通过将 ToolWindow 的 RadWindowInteropHelper.AllowTransparency 附加属性设置为 False 来使窗口不透明。这可以使用自定义 GeneratedItemsFactory 来实现。示例项目请参考this forum thread

问候, 米罗斯拉夫·涅佳尔科夫, Telerik 团队。

【讨论】:

  • 我在窗格停靠时显示非 WPF 内容,只有当窗格未停靠和浮动时,它才不起作用。这是否意味着窗口只有在浮动时才透明?
  • 好的。实际上,只需根据您的示例项目添加 NonTrasparentWindowsGeneratedItemsFactory 即可。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2010-10-17
相关资源
最近更新 更多