A CDXMenu Class for the CDX Library

The CDXMenu class is intended to deliver a fast and easy way to creating menu using CDX classes and a CDXBitmapFont class for computer games. You can select the font, size, color, alpha mode, and so forth for each menu.

Public Methods

  • CDXMenu
  • ~CDXMenu
  • Create
  • AddItem
  • Draw
  • SetTitle
  • SetColor
  • SetBackGround
  • SetAlpha
  • SetBorder
  • SetSound
  • SetItem
  • SetButtonSpeed
  • Reset
  • Enter

Example Program

#include <windows.h>
#include <windowsx.h>
#include <stdio.h>

#define CDXINCLUDEALL        // include all headers
#include <CDX.h>
#include <CDXBitmapFont.h>
#include <CDXMenu.h>


CDXScreen   * Screen = 0;    // The screen object; every
                             // program must have one.
                             // Remember to set all CDX objects
                             // to 0 when you declare them!
int           Toggle = 0;    // flag for the screen color

CDXBitmapFont * Font1;       // Define the Font object
CDXMenu       * MainMenu;    // Define the Main Menu object

#define TIMER_ID    1        // variables used for the timer
#define TIMER_RATE  500

#define NAME        "CDXExample"
#define TITLE       "CDX Example"

long PASCAL WinProc(HWND hWnd,
                    UINT message,
                    WPARAM wParam,
                    LPARAM lParam)
{
   switch(message)
   {
      case WM_TIMER:
         if( Toggle )    // fill the screen depending on
                         // toggle flag
         {
            Screen->Fill(0);
            Toggle = 0;
         }
         else
         {
            Screen->Fill(255);
            Toggle = 1;
         }

         // Draw the main menu
         if(!MainMenu->Enter())
         int Option = MainMenu->Draw(10,10);
         else    // if clicked
         {
            switch(Option){.....}
         }
         Screen->Flip();    // flip back and front buffers
         break;

      case WM_KEYDOWN:
         switch(wParam)
         {
            case VK_ESCAPE:    // if ESC key was hit, quit program
               PostMessage(hWnd, WM_CLOSE, 0, 0);
               break;
         }
         break;

      case WM_DESTROY:
         SAFEDELETE( Screen );    // delete the screen object
         PostQuitMessage(0);      // terminate the program
         break;
   }
   return DefWindowProc(hWnd, message, wParam, lParam);
}

BOOL InitApp(HINSTANCE hInst, int nCmdShow)
{
   HWND hWnd;
   WNDCLASS WndClass;

   WndClass.style         = CS_HREDRAW | CS_VREDRAW;
   WndClass.lpfnWndProc   = WinProc;
   WndClass.cbClsExtra    = 0;
   WndClass.cbWndExtra    = 0;
   WndClass.hInstance     = hInst;
   WndClass.hIcon         = LoadIcon(0, IDI_APPLICATION);
   WndClass.hCursor       = LoadCursor(0, IDC_ARROW);
   WndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
   WndClass.lpszMenuName  = NAME;
   WndClass.lpszClassName = NAME;
   RegisterClass(&WndClass);

   // create a window that covers the whole screen
   // this is needed for fullscreen CDX apps
   hWnd = CreateWindowEx(
      WS_EX_TOPMOST,
      NAME,
      TITLE,
      WS_POPUP,
      0,0,
      GetSystemMetrics(SM_CXSCREEN),
      GetSystemMetrics(SM_CYSCREEN),
      NULL,
      NULL,
      hInst,
      NULL);
   // when hWnd = -1 there was an error creating the main
   // window. CDXError needs a CDXScreen object; if there is
   // none at this early program stage, pass it NULL
   if(!hWnd)
      CDXError( NULL , "Could not create the main window" );

   // show the main window
   ShowWindow(hWnd, nCmdShow);
   UpdateWindow(hWnd);
   // Create the CDXSreen object
   Screen = new CDXScreen();
   if(FAILED(Screen->CreateFullScreen(hWnd, 640, 480, 8)))
      CDXError( NULL , "Could not set video mode 640x480x8" );

   // Create the CDXBitmapFont object
   Font1 = new CDXBitmapFont();
   Font1->Create(Screen,"Arial",15,RGB(255,255,0));

   // Create the CDXMenu object
   MainMenu = new CDXMenu();
    MainMenu->Create(Screen,Font1,RGB(250,100,0),RGB(250,100,0),
                     "MAIN MENU",150);
  MainMenu->AddItem("START GAME");
  MainMenu->AddItem("OPTIONS");
  MainMenu->AddItem("HELP");
  MainMenu->AddItem("CREDITS");
  MainMenu->AddItem("QUIT GAME");

   // Create our timer for flipping the screen display
   SetTimer(hWnd, TIMER_ID, TIMER_RATE, NULL);

  return TRUE;
}

int PASCAL WinMain( HINSTANCE hInst,
                    HINSTANCE hPrevInst,
                    LPSTR lpCmdLine,
                    int nCmdShow)
{
   MSG msg;

   if(!InitApp(hInst, nCmdShow))
      CDXError( NULL , "Could not initialize CDX application");

   while(1)
   {
      if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))
      {
         if(!GetMessage(&msg, NULL, 0, 0 ))
            return msg.wParam;
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }
      else WaitMessage();
   }
}

Downloads

Download Library (Binary + source + documentation)

Download example 1

Download example 2

For more info, visit: CDXMenu Home page

Requirements

CDX Library: www.cdxlib.com

CDXBitmapFont: http://www.horningabout.com/cdx/cdxbitmapfont.html

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read