<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://forums.xna.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>XNA Framework</title><link>http://forums.xna.com/forums/56.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 0.0)</generator><item><title>Re: A good way to embed the game class in a form (solution)</title><link>http://forums.xna.com/forums/thread/34192.aspx</link><pubDate>Tue, 27 Nov 2007 14:43:29 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:34192</guid><dc:creator>NightMarez</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/34192.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=56&amp;PostID=34192</wfw:commentRss><description>&lt;P&gt;cant get this to work xD im stupid i think :)&lt;/P&gt;</description></item><item><title>Re: A good way to embed the game class in a form (solution)</title><link>http://forums.xna.com/forums/thread/34182.aspx</link><pubDate>Tue, 27 Nov 2007 14:08:35 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:34182</guid><dc:creator>The ZMan</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/34182.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=56&amp;PostID=34182</wfw:commentRss><description>About time we FAQd this winform stuff - started list here &lt;A href="http://forums.xna.com/thread/34180.aspx"&gt;http://forums.xna.com/thread/34180.aspx&lt;/A&gt;</description></item><item><title>A good way to embed the game class in a form (solution)</title><link>http://forums.xna.com/forums/thread/34036.aspx</link><pubDate>Mon, 26 Nov 2007 19:35:58 GMT</pubDate><guid isPermaLink="false">4aa5dbf6-357b-46b2-b5b2-1b660a6dc370:34036</guid><dc:creator>Pfo Cubed</dc:creator><slash:comments>0</slash:comments><comments>http://forums.xna.com/forums/thread/34036.aspx</comments><wfw:commentRss>http://forums.xna.com/forums/commentrss.aspx?SectionID=56&amp;PostID=34036</wfw:commentRss><description>I often see many posts on here from people that want to put the game's window inside a form.&amp;nbsp; This is useful for editor applications, and so is the game class, which is why combining these two is a great idea (sometimes).&lt;br&gt;&lt;br&gt;This is the form load method for one of the forms in my application, it creates the game class:&lt;br&gt;&lt;br&gt;&lt;div style="background-color:White;"&gt;&lt;div style="margin:0px;padding:2px 2px 2px 8px;background-color:White;overflow-x:scroll;overflow-y:hidden;width:505px;"&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; RenderWindow()&lt;br&gt;        {&lt;br&gt;            InitializeComponent();&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// create the game&lt;/span&gt;&lt;br&gt;            game &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; PGEGame();&lt;br&gt;            game.IsMouseVisible &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;true&lt;/span&gt;;&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// force the game to run in a window&lt;/span&gt;&lt;br&gt;            IGraphicsDeviceManager graphicsDeviceManager &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; game.GetService&amp;lt;IGraphicsDeviceManager&amp;gt;();&lt;br&gt;            graphicsDeviceManager.CreateDevice();&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// beginDraw() relies on this&lt;/span&gt;&lt;br&gt;            game.GetType().BaseType.GetField(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"graphicsDeviceManager"&lt;/span&gt;,&lt;br&gt;                System.Reflection.BindingFlags.Instance &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;|&lt;/span&gt; System.Reflection.BindingFlags.NonPublic).SetValue(game, graphicsDeviceManager);&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// embed the render window into this form&lt;/span&gt;&lt;br&gt;            Form form &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; game.Form;&lt;br&gt;            form.FormBorderStyle &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; FormBorderStyle.None;&lt;br&gt;            form.Dock &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; DockStyle.Fill;&lt;br&gt;            form.TopLevel &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;false&lt;/span&gt;;&lt;br&gt;            form.Parent &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;this&lt;/span&gt;;&lt;br&gt;            form.Visible &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;true&lt;/span&gt;;&lt;br&gt;            Controls.Add(form);&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// handle resize event for render window&lt;/span&gt;&lt;br&gt;            game.Window.ClientSizeChanged += &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; EventHandler(Window_ClientSizeChanged);&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// handle Application events&lt;/span&gt;&lt;br&gt;            System.Windows.Forms.Application.Idle += &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; EventHandler(Application_Idle);&lt;br&gt;&lt;br&gt;	    // NOTE: you could create components here...&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// call Initialize and BeginRun&lt;/span&gt;&lt;br&gt;            game.GetType().BaseType.GetMethod(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Initialize"&lt;/span&gt;, BindingFlags.Instance &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;|&lt;/span&gt; BindingFlags.NonPublic).Invoke(game, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;);&lt;br&gt;            game.GetType().BaseType.GetMethod(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"BeginRun"&lt;/span&gt;, BindingFlags.Instance &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;|&lt;/span&gt; BindingFlags.NonPublic).Invoke(game, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;null&lt;/span&gt;);&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// get the gametime and call the first update&lt;/span&gt;&lt;br&gt;            GameTime gt &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; game.GetType().BaseType.GetField(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"gameTime"&lt;/span&gt;, &lt;br&gt;                System.Reflection.BindingFlags.Instance &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;|&lt;/span&gt; System.Reflection.BindingFlags.NonPublic).GetValue(game) &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;as&lt;/span&gt; GameTime;&lt;br&gt;            game.GetType().BaseType.GetMethod(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"Update"&lt;/span&gt;, BindingFlags.Instance &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;|&lt;/span&gt; BindingFlags.NonPublic).Invoke(game, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;new&lt;/span&gt; Object[] { gt });&lt;br&gt;&lt;br&gt;            &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// set doneFirstUpdate to true&lt;/span&gt;&lt;br&gt;            game.GetType().BaseType.GetField(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"doneFirstUpdate"&lt;/span&gt;, &lt;br&gt;                System.Reflection.BindingFlags.Instance &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;|&lt;/span&gt; System.Reflection.BindingFlags.NonPublic).SetValue(game, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;true&lt;/span&gt;);           &lt;br&gt;        }&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;PGEGame has the following member that is important here:&lt;br&gt;&lt;br&gt;&lt;div style="background-color:White;"&gt;&lt;div style="margin:0px;padding:2px 2px 2px 8px;background-color:White;overflow-x:scroll;overflow-y:hidden;width:505px;"&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;#if&lt;/span&gt; !(XBOX360)&lt;br&gt;&lt;br&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; Form Form&lt;br&gt;        {&lt;br&gt;            get { &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; Form.FromHandle(Window.Handle) &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;as&lt;/span&gt; Form; }&lt;br&gt;        }&lt;br&gt;&lt;br&gt;&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;#endif&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;Which returns the GameWindow as a Form.&amp;nbsp; You also need the following methods in the Form that contains the game:&lt;br&gt;&lt;br&gt;&lt;div style="background-color:White;"&gt;&lt;div style="margin:0px;padding:2px 2px 2px 8px;background-color:White;overflow-x:scroll;overflow-y:hidden;width:505px;"&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;protected&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;override&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; Dispose(&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;bool&lt;/span&gt; disposing)&lt;br&gt;        {&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;base&lt;/span&gt;.Dispose(disposing);&lt;br&gt;&lt;br&gt;            System.Windows.Forms.Application.Idle -= Application_Idle;&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; Application_Idle(&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br&gt;        {&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;while&lt;/span&gt; (AppStillIdle())&lt;br&gt;                game.Tick();&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;bool&lt;/span&gt; AppStillIdle()&lt;br&gt;        {&lt;br&gt;            NativeMethods.Message msg;&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;return&lt;/span&gt; !(NativeMethods.PeekMessage(&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;out&lt;/span&gt; msg, IntPtr.Zero, 0, 0, 0));&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;void&lt;/span&gt; Window_ClientSizeChanged(&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br&gt;        {&lt;br&gt;            GameWindow window &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; game.Window;&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;if&lt;/span&gt; (game.Window.ClientBounds.Width !&lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; 0 &amp;amp;&amp;amp; game.Window.ClientBounds.Height !&lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; 0)&lt;br&gt;                game.SetAspectRatio(game.Window.ClientBounds);&lt;br&gt;        }&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;
&lt;br&gt;And you need the following structure to examine messages:&lt;br&gt;&lt;br&gt;&lt;div style="background-color:White;"&gt;&lt;div style="margin:0px;padding:2px 2px 2px 8px;background-color:White;overflow-x:scroll;overflow-y:hidden;width:505px;"&gt;&lt;pre&gt;&lt;span style="color:Black;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;    &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;class&lt;/span&gt; NativeMethods&lt;br&gt;    {&lt;br&gt;        [StructLayout(LayoutKind.Sequential)]&lt;br&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;struct&lt;/span&gt; Message&lt;br&gt;        {&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; IntPtr hWnd;&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; UInt32 msg;&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; IntPtr wParam;&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; IntPtr lParam;&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; UInt32 time;&lt;br&gt;            &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; Point p;&lt;br&gt;        }&lt;br&gt;&lt;br&gt;        [SuppressUnmanagedCodeSecurity] &lt;span style="color:Green;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;// We won't use this maliciously&lt;/span&gt;&lt;br&gt;        [DllImport(&lt;span style="font-family:Courier New;font-size:11px;font-weight:normal;"&gt;"User32.dll"&lt;/span&gt;, CharSet &lt;span style="color:Red;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;=&lt;/span&gt; CharSet.Auto)]&lt;br&gt;        &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;static&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;extern&lt;/span&gt; &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;bool&lt;/span&gt; PeekMessage(&lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;out&lt;/span&gt; Message msg, IntPtr hWnd, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;uint&lt;/span&gt; messageFilterMin, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;uint&lt;/span&gt; messageFilterMax, &lt;span style="color:Blue;background-color:transparent;font-family:Courier New;font-size:11px;font-weight:normal;"&gt;uint&lt;/span&gt; flags);&lt;br&gt;    }&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;The form should implement IDisposable so it can release its event handler for Application.Idle.&amp;nbsp; This is essentially creating the game and not calling run, letting the application render the game when it's not busy.&amp;nbsp; It performs good enough for me, I have not tested it for speed and since this is usually for editing applications, speed is not the primary focus.&amp;nbsp; The above sample is primarily based on code posted by not_a_commie @ &lt;a href="http://forums.xna.com/post/10166.aspx"&gt;http://forums.xna.com/post/10166.aspx&lt;/a&gt;&lt;br&gt;</description></item></channel></rss>