簡體   English   中英

在WPF浮動撕下選項卡中托管Win32窗口

[英]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圖形未顯示的原因。

我的問題是:

  1. 我本來就知道使用WPF,每個Window對象都只有一個HWND,但是這如何與停靠庫中的浮動面板一起使用? 浮動面板實際上是作為基礎對象還是用戶控件的窗口?

  2. 有什么想法為什么我的本機OSG圖形未顯示在浮動撕下選項卡上? 它與傳入的父句柄有關嗎?

RadDocking控件默認使用透明的WPF窗口顯示其ToolWindows,並且作為WPF的平台限制,您不能在此類透明窗口中顯示任何非WPF內容。 您可以通過將ToolWindow的RadWindowInteropHelper.AllowTransparency附加屬性設置為False來使窗口不透明。 這可以通過使用自定義的GeneratedItemsFactory來實現。 請參考此論壇主題作為示例項目。

此致,特里里克(Telerik)隊的米羅斯拉夫·涅迪亞科夫(Miroslav Nedyalkov)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM