Simple Direct Draw Using MFC

Environment: Visual C++ 6

Firstly, forgive me for my code. I have really tried my best to make is as easy to read as possible but DirectX is never the easiest thing to code. I originally wanted to write DirectX applications but found that every book I read relating to DirectX was coded using SDK material and not MFC. I wanted to create a very simple wrapper that allowed the easy display of bitmaps on the screen using DirectDraw.

The code itself is fairly limited to displaying bitmaps on the screen (FULLSCREEN MODE) using DirectDraw but it shows the concepts of using wrappers to make your programs far easier to use. I could have put it all in a DLL but realised that this would not be simple for you all to use. Anyway, here is how you use the libraries.

1. Include the following header into your Application Header or StdAfx.h. E.g


#include "DirectControl.h"

2. Create an instance of the CDirectControl Object. For example:


CDirectControl m_Control;

Please note that this should be placed either as a global variable or inside the Application class header (i.e. not temporary)

3. In the App Init Instance call the following code:


 m_pMainWnd = m_Control.CreateFullScreen(800,600,16);
if (!m_pMainWnd)
return FALSE;

Replace the 800 and 600 with the required x & y resolutions that you want to use. Replace the 16 with the bits-per-pixel required. My program does not maintain or handle the Palette because I was only really using hi-color modes for the bitmaps.

4. You can now use the Controller to create bitmaps (from the resource) using the code :


m_Control.CreateOffScreenSurface("My Bitmap",IDB_IMAGE);

The first parameter is the object identifier that I use to manipulate or select the object at a further time. The second parameter is the resource id of the bitmap.

You also need to tell the controller that the bitmap is available to be rendered. The default is false so you need to set the visibility by using the code:


m_Control.GetSurface("My Bitmap")->SetRender(TRUE);

5. The bitmaps are defaulted to the top left of the screen (x=0,y=0) but you can alter its position by using:


m_Control.GetSurface("My Bitmap")->SetPosition(10,10);

Relating to the x & y screen co-ordinates. The program automatically clips to the screen.

6. Once you have created your bitmap/s you can render the screen by calling:


 m_Control.Render(TRUE,FALSE,FALSE);
The first parameter decides if you want to clear the screen first before rendering. The second decides whether you want to render any bitmaps that have been flagged renderable. the third parameter decides whether you want to update the Screen. I did it this way because you dont want to update the screen all the time e.g. if you want to use one bitmap , change its position and render it again then update the screen.

Ok. What I suggest is that you look at the example project I have done. If anyone wishes to expand it further etc. I would welcome and more additional source code or comments. Please dont laugh at my code. I just wanted Direct X to be easy for everyone. Enjoy.

BTW... I havn't implemented the Escape key so you will have to press ALT-F4 to quit.

Downloads

Download demo project - 28 Kb