[英]Hosting a Win32 window in a WPF floating tear off tab
我目前在WPF中托管Win32 OSG(基於OpenGL構建)控件。 我正在使用telerik擴展塢。 當窗格與MainWindow停靠在一起時,一切正常。 但是,當我撕下標簽時, 不會在撕下標簽中重新創建OSG圖形 。
我將HwndHost
子類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 MainWindow的句柄。 但是,當我拉出選項卡並將其變成浮動選項卡時, hwndParent.handle
屬性是我無法在Spy ++中找到的值。 Spy ++的浮動標簽“ hwnd”值與上述方法產生的值相同。 我懷疑這可能是OSG圖形未顯示的原因。
我的問題是:
我本來就知道使用WPF,每個Window對象都只有一個HWND,但是這如何與停靠庫中的浮動面板一起使用? 浮動面板實際上是作為基礎對象還是用戶控件的窗口?
有什么想法為什么我的本機OSG圖形未顯示在浮動撕下選項卡上? 它與傳入的父句柄有關嗎?
RadDocking控件默認使用透明的WPF窗口顯示其ToolWindows,並且作為WPF的平台限制,您不能在此類透明窗口中顯示任何非WPF內容。 您可以通過將ToolWindow的RadWindowInteropHelper.AllowTransparency附加屬性設置為False來使窗口不透明。 這可以通過使用自定義的GeneratedItemsFactory來實現。 請參考此論壇主題作為示例項目。
此致,特里里克(Telerik)隊的米羅斯拉夫·涅迪亞科夫(Miroslav Nedyalkov)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.