2012-05-11 19 views
2

現在、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のグラフィックが表示されない理由かもしれないと思う。

私の質問は以下のとおりです。

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

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

+0

Win32とWPFをどのように統合したかのサンプルコードを共有できますか? –

答えて

4

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

よろしくお願いします。 Miroslav Nedyalkov、 Telerikチーム。

+0

ペインがドッキングされていないときにのみ非ペイントコンテンツを表示しています。これは、ウィンドウが浮いているときだけ透明であることを意味しますか? – Seth

+0

実際には、サンプルプロジェクトごとにNonTrasparentWindowsGeneratedItemsFactoryを追加するだけでした。ありがとう! – Seth

関連する問題