현재 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 그래픽이 표시되지 않는 이유 일 수 있습니다.
내 질문은 :
나는 각각의 윈도우 객체와 연관된 만 HWND가 기본적으로 WPF로 알고, 그러나 어떻게합니까 도킹 라이브러리에서 부동 패널이 작동합니까? 부동 패널이 실제로 기본 객체 또는 사용자 정의 컨트롤의 창입니까?
내 기본 OSG 그래픽이 탭 분리 표시에 표시되지 않는 이유는 무엇입니까? 그것은 전달되는 부모 핸들과 관련이 있습니까?
Win32와 WPF를 어떻게 통합했는지 예제 코드를 공유해 주실 수 있습니까? –