2012-05-11 2 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 MainWindow를 핸들이다. 그러나 탭을 당겨서 부동 탭이되면 hwndParent.handle 특성은 Spy ++에서 찾을 수없는 값입니다. Spy ++에 따른 부동 탭 'hwnd'값은 위의 방법으로 생성 된 값과 같습니다. 이것이 OSG 그래픽이 표시되지 않는 이유 일 수 있습니다.

내 질문은 :

  1. 나는 각각의 윈도우 객체와 연관된 만 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

창을 도킹 할 때 비 WPF 컨텐트를 표시하고 있습니다. 창이 도킹되어 있지 않고 작동하지 않는 경우에만 표시됩니다. 창문이 떠있을 때 창만 투명하다는 뜻입니까? – Seth

+0

확인. 실제로는 샘플 프로젝트별로 NonTrasparentWindowsGeneratedItemsFactory를 추가하는 것만으로도 효과가있었습니다. 감사! – Seth