2012-05-11 46 views
2

我目前在WPF中託管一個Win32 OSG(建立在OpenGL上)控件。我正在使用telerik停靠庫。當窗格與MainWindow對接時,一切正常。但是,當我撕下標籤時,OSG圖形不會在撕下選項卡中重新創建。在WPF浮動撕下選項卡上託管一個Win32窗口

我是繼承HwndHost它使用CreateWindowEx創建本機Win32主機並返回本機句柄(請參閱下面的代碼)。然後我將該句柄傳遞給由用戶控件託管的本機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. 我知道本身與WPF只有每個窗口對象相關聯的HWND,但是如何與浮動面板對接圖書館這項工作?浮動面板實際上是作爲底層對象還是用戶控件的窗口?

  2. 任何想法爲什麼我的本地OSG圖形沒有顯示在浮動分離選項卡上?它與正在傳入的父句柄有關嗎?

+0

可以請你分享一下如何將Win32與WPF集成在一起的示例代碼? –

回答

4

的RadDocking控制使用透明WPF窗口默認以顯示其toolwindows的和作爲WPF的一個平臺的限制,可以不顯示在這樣的透明窗口的任何非WPF內容。你可以做的是通過將ToolWindow的RadWindowInteropHelper.AllowTransparency屬性設置爲False來使窗口不透明。這可以使用自定義的GeneratedItemsFactory來實現。作爲示例項目,請參考this forum thread

Regards, Miroslav Nedyalkov, Telerik團隊。

+0

當窗格停靠時,我顯示非WPF內容,只有當窗格未停靠並浮動時它不起作用。這是否意味着窗戶在浮動時才透明? – Seth

+0

好的。這實際上只是按照您的示例項目添加NonTrasparentWindowsGeneratedItemsFactory。謝謝! – Seth

相關問題