Можете ли вы сделать отрисовку Winform поверх полноэкранного слоя DirectX?

У меня есть собственное приложение C++, которое выполняет 3D-рендеринг с использованием DirectX. Приложение может переключаться между оконным и полноэкранным режимами с помощью IDXGISwapChain::SetFullscreenState().
Однако часть моего пользовательского интерфейса находится в .Net Winform в управляемой dll.

В оконном режиме я просто вызываю .Net dll, и это открывает вторичную Winform, поэтому два окна, основной собственный MFC/DirectX и .Net Winform control.

Но когда DirectX находится в полноэкранном режиме, могу ли я заставить Winform отображаться над слоем Direct X? Это вообще возможно?

Просто установив свойство Winform this.TopMost = true; недостаточно. Winform находится под слоем Direct X. Я просто хочу, чтобы «моя» WinForm отображалась на весь экран.


person meissnersd    schedule 18.03.2013    source источник
comment
Я почти уверен, что это невозможно. В этом весь смысл полноэкранного режима — разрешить приложению владеть всем экраном.   -  person Cody Gray    schedule 19.03.2013


Ответы (1)


Вы можете скопировать контроллер домена WinForm в растровое изображение в памяти и скопировать его в рендеринг DirectX < href="http://msdn.microsoft.com/en-us/library/windows/desktop/bb172902%28v=vs.85%29.aspx" rel="nofollow noreferrer">поверхность и пройти сообщения обратно в WinForm. Однако это может быть медленным, если вы пытаетесь сделать очень много.

person Motes    schedule 19.03.2013
comment
ох... сложно. Если вы унаследованы от System.Windows.Form, вы можете реализовать обход для обработчика сообщений окна или Application.AddMessageFilter. Затем вы можете имитировать фокус рабочего стола и вручную отправлять оконные сообщения в форму. Таким образом диалог получит WM_PAINT и события мыши и клавиатуры. Так что это звучит по крайней мере возможно, при достаточном усилии. Окей круто. - person meissnersd; 20.03.2013