我目前在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圖形不顯示的原因。
我的問題是:
我知道本身與WPF只有每個窗口對象相關聯的HWND,但是如何與浮動面板對接圖書館這項工作?浮動面板實際上是作爲底層對象還是用戶控件的窗口?
任何想法爲什麼我的本地OSG圖形沒有顯示在浮動分離選項卡上?它與正在傳入的父句柄有關嗎?
可以請你分享一下如何將Win32與WPF集成在一起的示例代碼? –