CLI-C++ .net forms Game Loop

One of my past wonders was:
How can i render Direct 11(or…) on a .net form?

Its actually relatively simple, these are the steps:

When you create the project, create a new file called main.cpp, and an entrance for the program.

To start the .net form:

If you just declare an instance of the .net form inside the cpp file, it WILL go wrong, because it needs to be declared in a managed envoirement.
To do that, you need to do so:

#include <vcclr.h> // Include this one, containing a template class called gcroot.

public class ManagedGlobals
gcroot<Editor ^> MainEditor;

ManagedGlobals MG;

Now you have a wrapper for your form, to start it in the appropriate way:

int main(array<System::String ^> ^args)
// Enabling Windows XP visual effects before any controls are created

// Create the main window and run it
MG.MainEditor = gcnew Editor();

while (MG.MainEditor->Created)
return 0;

As you see i have a while loop simply saying:

While the editor(in this case) is open, do the following:

Let the application(editor) do all the stuff it has to do right now, check for input blablabla…
Then after that render the frame.

To render in a, lets say a frame, we can do so:

–In the startup of the editor–

HWND pHandle = (HWND)RenderPanel->Handle.ToPointer();

Here we’ve got the handle of the panel, and sent it to a function called InitD3D.


void InitD3D(HWND hWnd)



scd.OutputWindow = hWnd;



Then for each of the frames, the panel is treated as a window, meaning that the output will appear in that panel.

Good Luck!

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s