現在、WPFでWin32 OSG(OpenGL上に構築)コントロールをホストしています。私はtelerikドッキングライブラリを使用しています。ペインがMainWindowにドッキングされていると、すべてうまく動作します。しかし、タブを切り取ったときに、OSGグラフィックは切り取りタブで再作成されません。WPFフローティングティアオフタブでWin32ウィンドウをホストする
CreateWindowEx
を使用してネイティブのWin32ホストを作成し、ネイティブハンドル(以下のコードを参照)を返す、HwndHost
をサブクラス化しています。その後、そのハンドルをユーザーコントロールによってホストされているネイティブ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メインウィンドウのハンドルです。ただし、タブを引き出して浮動タブにすると、hwndParent.handle
属性はSpy ++で検出できない値になります。 Spy ++によるフローティングタブの 'hwnd'値は、上記の方法で生成されたものと同じです。私はこれがOSGのグラフィックが表示されない理由かもしれないと思う。
私の質問は以下のとおりです。
は、私は、各Windowオブジェクトに関連付けられている唯一のHWNDがあるネイティブWPFと知っている、しかし、どのようにドッキングライブラリにフローティングパネルと、この作品?フローティングパネルは、実際には下にあるオブジェクトまたはユーザーコントロールとしてのウィンドウですか?
私のネイティブOSGグラフィックスが浮きティアオフタブに表示されない理由はありますか?それは渡されている親ハンドルに関連していますか?
Win32とWPFをどのように統合したかのサンプルコードを共有できますか? –