2013-03-18 135 views
1

我有一個使用DirectX渲染3D的本地C++應用程序。 該應用程序可以使用IDXGISwapChain :: SetFullscreenState()在窗口和全屏之間切換。
但是,我的一些用戶界面是在一個.net Winform託管的DLL中。您可以在全屏DirectX圖層上進行Winform繪圖嗎?

在窗口模式下,我只是調用.Net dll,並打開第二個Winform,所以兩個窗口,主要本機MFC/DirectX和.Net Winform控件。

但是,當DirectX全屏顯示時,我可以讓Winform顯示在Direct X圖層上方嗎? 它甚至有可能嗎?

僅僅設置Winform屬性 this.TopMost = true; 是不夠的。 Winform位於Direct X圖層下。 我只想在整個屏幕上顯示「我的」WinForm。

+0

我敢肯定,這是不可能的。這就是「全屏」模式的要點 - 允許應用程序擁有整個屏幕。 – 2013-03-19 04:49:49

回答

0

您可以將copy your WinForm's DC放到內存中的位圖上,並將其複製到DirectX渲染surface並將消息傳遞迴WinForm。如果你嘗試做很多事情,它可能會變慢。

+0

哦......棘手。如果您從System.Windows.Form派生,則可以實現窗口消息處理程序或Application.AddMessageFilter的遍歷。然後,您可以模擬桌面焦點並手動向窗體發送窗口消息。這樣對話框將獲得WM_PAINT和鼠標和鍵盤事件。所以聽起來至少可以,付出足夠的努力。嗯不錯。 – meissnersd 2013-03-20 14:18:50