我正在尝试在 Winforms MDI 应用程序中嵌入一个简单的 XNA 应用程序,我似乎遇到了问题。我正在关注http://xbox.create.msdn.com/en-US/education/catalog/sample/winforms_series_1的示例,但我不确定自己做错了什么。
在我的 MDI 父级中,我通过以下方式实例化渲染表单:
private void MainForm_Load(object sender, EventArgs e)
{
var render = new RenderForm();
render.MdiParent = this;
render.Show();
}
我的渲染表单的代码是:
public class RenderForm : Form
{
private XnaRenderer _renderer;
protected override void OnCreateControl()
{
if (!DesignMode)
_renderer = new XnaRenderer(Handle, ClientSize.Width, ClientSize.Height);
base.OnCreateControl();
}
protected override void OnPaint(PaintEventArgs e)
{
_renderer.RenderScene(null);
}
}
因此,当创建表单时,它会尝试创建我的XnaRenderer
类的实例。 ClientSize.Width
是 284 和ClientSize.Height
261,Handle
看起来是有效的。构造函数的代码是:
public XnaRenderer(IntPtr windowHandle, int width, int height)
{
_graphicsService = new GraphicsDeviceService(windowHandle, width, height);
SetViewport(width, height);
}
该类与示例代码中的GraphicsDeviceService
类基本相同,但它不是单例。构造函数的代码是:
public GraphicsDeviceService(IntPtr windowHandle, int width, int height)
{
_presentationParams = new PresentationParameters
{
BackBufferFormat = SurfaceFormat.Color,
BackBufferHeight = Math.Max(height, 1),
BackBufferWidth = Math.Max(width, 1),
DepthStencilFormat = DepthFormat.Depth24,
DeviceWindowHandle = windowHandle,
PresentationInterval = PresentInterval.Immediate
};
_graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, GraphicsProfile.Reach,
_presentationParams);
}
但是,当GraphicsDevice
对象被实例化时,我得到以下信息InvalidOperationException
:
发生意外的错误。
没有更多的异常消息,也没有内部异常,如果没有很多 XNA 知识,这很难调试。
有没有人看到我做错了什么?