2

現在、WPF で Win32 OSG (OpenGL 上に構築) コントロールをホストしています。私はテレリックドッキングライブラリを使用しています。ペインが MainWindow にドッキングされている場合、すべてが正常に機能します。ただし、タブを切り離すと、OSG グラフィックが切り離されたタブに再作成されません

ネイティブ Win32 ホストを作成し、ネイティブ ハンドルを返すサブクラス化HwndHostを行っていCreateWindowExます (以下のコードを参照)。次に、そのハンドルを、ユーザー コントロールによってホストされているネイティブ 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属性はSpy++では見つけられない値です。Spy++ によるフローティング タブの 'hwnd` 値は、上記の方法で生成されたものと同じです。これが、OSG グラフィックが表示されない理由であると思われます。

私の質問は次のとおりです。

  1. 各 Window オブジェクトに HWND しか関連付けられていない WPF をネイティブに知っていますが、これはドッキング ライブラリのフローティング パネルでどのように機能しますか? フローティング パネルは、実際には下にあるオブジェクトまたはユーザー コントロールとしてのウィンドウですか?

  2. 私のネイティブ OSG グラフィックスがフローティングティアオフタブに表示されない理由はありますか? 渡されている親ハンドルに関連していますか?

4

1 に答える 1

5

RadDocking コントロールは、透明な WPF ウィンドウを使用して ToolWindows をデフォルトで表示します。WPF のプラットフォームの制限として、このような透明なウィンドウに非 WPF コンテンツを表示することはできません。できることは、ToolWindow の RadWindowInteropHelper.AllowTransparency 添付プロパティを False に設定して、ウィンドウを非透明にすることです。これは、カスタム GeneratedItemsFactory を使用して実現できます。サンプル プロジェクトとして、このフォーラム スレッドを参照してください。

よろしく、 Miroslav Nedyalkov、Telerik チーム。

于 2012-05-11T08:53:19.763 に答える