2013-03-18 65 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