在WPF浮动分离选项卡中托管Win32窗口

我目前在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);
    }

当按照预期调试上述方法时, hwndParent.handle参数是当选项卡停靠在主窗口中时WPF MainWindow的句柄。 但是,当我将该选项hwndParent.handle出并成为浮动选项卡时, hwndParent.handle属性是我无法在Spy ++中找到的值。 根据Spy ++的浮动选项卡'hwnd'值与上述方法产生的值相同。 我怀疑这可能是OSG图形不显示的原因。

我的问题是:

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

  • 任何想法为什么我的本地OSG图形没有显示在浮动撕掉选项卡上? 它与正在传入的父句柄有关吗?


  • RadDocking控件默认使用透明的WPF窗口来显示其工具窗口,并且作为WPF的平台限制,您不能在这种透明窗口中显示任何非WPF内容。 你可以做的是通过将ToolWindow的RadWindowInteropHelper.AllowTransparency属性设置为False来使窗口不透明。 这可以使用自定义的GeneratedItemsFactory来实现。 请参考此论坛主题作为示例项目。

    问候,Telerik团队Miroslav Nedyalkov。

    链接地址: http://www.djcxy.com/p/41197.html

    上一篇: Hosting a Win32 window in a WPF floating tear off tab

    下一篇: How to find main HWND handle of MFC