如何在Windows 7上自动支持XNA中的单显示器或双显示器?

时间:2011-06-16 16:37:54

标签: c# windows-7 xna

我正在使用Microsoft XNA创建一个游戏应用程序,它将在一个面向公众的屏幕(投影仪)上运行,并在笔记本电脑屏幕上显示控件(Windows 7)。当第二个显示器不可用时,我只想要面向公众的屏幕显示在笔记本电脑的屏幕上。屏幕的比例是相同的。

是否有图书馆允许我们自动执行此操作,或者最糟糕的是更改设置?

2 个答案:

答案 0 :(得分:3)

检查GraphicsAdapter.Adapters.Count()

是否有两个监视器可用

如果有,请创建另一个表单,然后将其设置为第二个显示器(投影仪)。然后,对于每一帧,将面向公众的界面渲染到辅助监视器上,并将控件绘制到主要界面上。

要在表单之间切换,只需交换句柄:

graphics.GraphicsDevice.Present(form1.Handle);

否则,只绘制面向公众。

您可以在http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1

了解如何在XNA中使用WinForms

此解决方案假设有两件事:

  • 主显示器设置为笔记本电脑的显示器,第二个显示器设置为扩展(而不是镜像)
  • 您正在通过WinForms使用XNA

答案 1 :(得分:0)

我能想到的最好方法是创建渲染服务器和客户端应用程序。

您可以让渲染服务器对两个单独的RenderTarget2D(或主屏幕,然后在rendertarget上)执行所有实际渲染,然后将一个rendertarget传输到客户端以渲染到辅助屏幕。这意味着客户端应用程序非常轻量级,并且只涉及将纹理渲染到全屏。

将数据传输到客户端应用程序可以通过多种方式完成,但在这种情况下,我个人最喜欢的是一个内存映射文件,用于将rendertarget的字节数据传输到第二个。否则应该使用tcp通信来提高性能。如果您需要有关提取字节数据或转移到其他应用程序的信息,只需评论我的帖子。