Para poder incrustar XNA en Winforms me base en los ejemplos oficiales de Microsoft y el código que proporcionaban (desgraciadamente las ligas ya no funcionan pero si alguien le interesa era esta http://create.msdn.com/en-US/education/catalog/sample/winforms_series_1) . Por suerte guarde una copia =) y pueden descargar el código original de Microsoft desde aquí.
Para poder empezar debemos tener instalado Visual Studio 2010 como IDE y el SDK de XNA (los enlaces de descarga se pueden obtener rápidamente googleando), el lenguaje de programacion sera C# , primero debemos crear un proyecto nuevo pero de Winforms con el nombre que nos parezca mas correcto.
Después de crear el proyecto debemos copiar las clases GraphicsDeviceControl.cs, GraphicsDeviceService.cs y ServiceContainer.cs que descargamos del código de Microsoft a la carpeta donde esta nuestro código (generalmente la ruta es C://../VisualStudio/Proyectos/NombreDeMiProyecto/NombreDeMiProyecto/ que debe contener únicamente las clases generadas por el IDE) y agregarlas desde la interfaz con click derecho sobre el proyecto, en el submenu seleccionar Add>Existing Item y seleccionar las clases que acabamos de agregar a la carpeta.
Después de este paso deben de verse las clases en el árbol de archivos del proyecto.
Ahora debemos agregar las referencias a XNA para que las clases agregadas funcionen dando click derecho sobre "References".
En la ventana que se abre, nos vamos a la pestaña .NET y seleccionamos todas las referencias al framework de XNA y compilamos para verificar que no hay ningún error, si todo funciona correctamente es que lo hemos hecho bien hasta ahora.
Como en este caso solo queremos que este renderizada por la tarjeta de vídeo una parte de la aplicacion utilizando XNA, agregaremos un panel desde el diseñador de interfaces donde sucederá esto (de hecho se puede hacer con cualquier componente de winforms).
Ahora agregamos una clase a nuestro proyecto, yo le llame XNAPanel que heredara de la clase GraphicsDeviceControl (que esta en el namespace WinFormsGraphicsDevice) e implementar los métodos abstractos Initialize() y Draw().
Aquí se muestra el código:
Ahora tenemos que forzar a que el panel de Winforms hecho con el diseñador sea sustituido por nuestro panel creado (si no lo hacemos de esta manera, no podremos usar el diseñador en nuestra aplicacion).
Para llevar a cabo esto debemos entrar al código de nuestra forma generada por el asistente (hacer click derecho en form1 y entrar a "View code" de la clase Form1.Designer.cs)
Observamos que aquí viene comentado la parte de código donde se crea cada componente de la interfaz gráfica.
Para evitar cometer errores e interferir con el código autogenerado, vamos a implementar un método llamado initializeXNAPanel() y aquí asignaremos nuestro XNAPanel al contenedor panel creado con el asistente, además declaramos nuestra referencia al XNAPanel para poder utilizarlo.
Después de realizar este paso, solo tenemos que llamar a nuestro método en el momento en que es creada nuestra forma, en este caso es en la clase Form1.cs.
Si todo ha salido bien debemos ver un bonita pantalla como esta:
...Y eso es todo :D , para revisar el proyecto, los códigos fuente están aquí
Cualquier duda o comentario no duden en contactarme =)
Para evitar cometer errores e interferir con el código autogenerado, vamos a implementar un método llamado initializeXNAPanel() y aquí asignaremos nuestro XNAPanel al contenedor panel creado con el asistente, además declaramos nuestra referencia al XNAPanel para poder utilizarlo.
Después de realizar este paso, solo tenemos que llamar a nuestro método en el momento en que es creada nuestra forma, en este caso es en la clase Form1.cs.
Si todo ha salido bien debemos ver un bonita pantalla como esta:
...Y eso es todo :D , para revisar el proyecto, los códigos fuente están aquí
Cualquier duda o comentario no duden en contactarme =)










