home *** CD-ROM | disk | FTP | other *** search
/ Beginning C++ Through Gam…rogramming (2nd Edition) / BCGP2E.ISO / bloodshed / devcpp-4.9.9.2_setup.exe / Examples / WinMenu / main.cpp next >
C/C++ Source or Header  |  2002-03-05  |  5KB  |  138 lines

  1.  
  2. #include <windows.h>
  3. #include "main.h"
  4.  
  5. /* Declare WindowsProcedure */
  6. LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
  7. /* Make the classname into a global variable */
  8. char szClassName[] = "Windows Example";
  9. HINSTANCE hThisInstance;
  10.  
  11. int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)
  12.  
  13. {
  14.     HWND hwnd;               /* This is the handle for our window */
  15.     MSG messages;            /* Here messages to the application is saved */
  16.     WNDCLASSEX wincl;        /* Datastructure for the windowclass */
  17.     HMENU menu;              /* Handle of the menu */
  18.  
  19.     /* The Window structure */
  20.     wincl.hInstance = hThisInstance;
  21.     wincl.lpszClassName = szClassName;
  22.     wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
  23.     wincl.style = CS_DBLCLKS;                 /* Ctach double-clicks */
  24.     wincl.cbSize = sizeof(WNDCLASSEX);
  25.  
  26.     /* Use default icon and mousepointer */
  27.     wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
  28.     wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
  29.     wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
  30.     wincl.lpszMenuName = NULL; /* No menu */
  31.     wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
  32.     wincl.cbWndExtra = 0;                      /* structure or the window instance */
  33.     /* Use lightgray as the background of the window */
  34.     wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
  35.  
  36.     /* Register the window class, if fail quit the program */
  37.     if(!RegisterClassEx(&wincl)) return 0;
  38.  
  39.     /* The class is registered, lets create the program*/
  40.     hwnd = CreateWindowEx(
  41.            0,                   /* Extended possibilites for variation */
  42.            szClassName,         /* Classname */
  43.            "Windows Example",         /* Title Text */
  44.            WS_OVERLAPPEDWINDOW, /* defaultwindow */
  45.            CW_USEDEFAULT,       /* Windows decides the position */
  46.            CW_USEDEFAULT,       /* where the window end up on the screen */
  47.            544,                 /* The programs width */
  48.            375,                 /* and height in pixels */
  49.            HWND_DESKTOP,        /* The window is a childwindow to desktop */
  50.            NULL,                /* No menu */
  51.            hThisInstance,       /* Program Instance handler */
  52.            NULL                 /* No Window Creation data */
  53.            );
  54.  
  55.     /* Make the window visible on the screen */
  56.     ShowWindow(hwnd, nFunsterStil);
  57.  
  58.     menu = LoadMenu(hThisInstance, MAKEINTRESOURCE(ID_MENU));
  59.     SetMenu(hwnd, menu);
  60.  
  61.     /* Run the nessageloop. It will run until GetMessage( ) returns 0 */
  62.     while(GetMessage(&messages, NULL, 0, 0))
  63.     {
  64.            /* Send message to WindowProcedure */
  65.            DispatchMessage(&messages);
  66.     }
  67.  
  68.     /* The program returvalue is 0 - The value that PostQuitMessage( ) gave */
  69.     return messages.wParam;
  70. }
  71.  
  72. /* This function is called by the Windowsfunction DispatchMessage( ) */
  73. LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
  74. {
  75.     switch (message)                  /* handle the messages */
  76.     {
  77.        case WM_COMMAND:
  78.            switch( wParam )
  79.            {
  80.              case IDM_FILENEW:
  81.              case IDM_FILEOPEN:
  82.              case IDM_FILESAVE:
  83.              case IDM_FILESAVEAS:
  84.              case IDM_FILEPRINT:
  85.              case IDM_FILEPAGESETUP:
  86.              case IDM_FILEPRINTSETUP:
  87.  
  88.              case IDM_EDITUNDO:
  89.              case IDM_EDITCUT:
  90.              case IDM_EDITCOPY:
  91.              case IDM_EDITPASTE:
  92.              case IDM_EDITDELETE:
  93.                   MessageBox( hwnd, (LPSTR) "Function Not Yet Implemented.",
  94.                               (LPSTR) szClassName,
  95.                               MB_ICONINFORMATION | MB_OK );
  96.                   return 0;
  97.  
  98.              case IDM_HELPCONTENTS:
  99.                   WinHelp( hwnd, (LPSTR) "HELPFILE.HLP",
  100.                            HELP_CONTENTS, 0L );
  101.                   return 0;
  102.  
  103.              case IDM_HELPSEARCH:
  104.                   WinHelp( hwnd, (LPSTR) "HELPFILE.HLP",
  105.                            HELP_PARTIALKEY, 0L );
  106.                   return 0;
  107.  
  108.              case IDM_HELPHELP:
  109.                   WinHelp( hwnd, (LPSTR) "HELPFILE.HLP",
  110.                            HELP_HELPONHELP, 0L );
  111.                   return 0;
  112.  
  113.              case IDM_FILEEXIT:
  114.                   SendMessage( hwnd, WM_CLOSE, 0, 0L );
  115.                   return 0;
  116.  
  117.              case IDM_HELPABOUT:
  118.                   MessageBox (NULL, "About..." , "Windows example version 0.01", 1);
  119.                   return 0;
  120.  
  121.            }
  122.            break;
  123.  
  124.       case WM_CLOSE:
  125.            DestroyWindow( hwnd );
  126.            return 0;
  127.  
  128.       case WM_DESTROY:
  129.            PostQuitMessage (0);
  130.            return 0;
  131.  
  132.       break;
  133.       default:                   /* for messages that we don't deal with */
  134.       return DefWindowProc(hwnd, message, wParam, lParam);
  135.    }
  136.   return 0;
  137. }
  138.