A CDXMenu Class for the CDX Library

WEBINAR:
On-Demand

How to Boost Database Development Productivity on Linux, Docker, and Kubernetes with Microsoft SQL Server 2017


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



Comments

  • There are no comments yet. Be the first to comment!

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Using Internet of Things (IoT) technologies, colleges and universities are linking anything and everything to create new applications that elevate the campus experience. It's called a Smart Campus. And it's transforming campus life for students, faculty and visitors. When everything is connected, devices and applications can interact with users and with each other in ways that weren't possible before: digital classrooms, connected campus ID cards, connected lighting and building environmental systems and …

  • With the cloud transforming application development and deployment — enabling organizations to improve flexibility, automate processes, and decrease time to market — some big questions remain. One of the most important issues an organization must address is how it can best employ the smarter tools and limitless scale that the cloud offers. One way that enterprises take advantage of the benefits of the cloud is by deploying their own private cloud. Read this white paper to learn how private clouds …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date