現在、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 グラフィックが表示されない理由であると思われます。
私の質問は次のとおりです。
各 Window オブジェクトに HWND しか関連付けられていない WPF をネイティブに知っていますが、これはドッキング ライブラリのフローティング パネルでどのように機能しますか? フローティング パネルは、実際には下にあるオブジェクトまたはユーザー コントロールとしてのウィンドウですか?
私のネイティブ OSG グラフィックスがフローティングティアオフタブに表示されない理由はありますか? 渡されている親ハンドルに関連していますか?