home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / win_lrn / menu / demenu.c < prev    next >
C/C++ Source or Header  |  1988-08-10  |  3KB  |  119 lines

  1. /*  Function Name:   DestroyMenu
  2.  *
  3.  *  Description:
  4.  *   The program below will create a menu.  When the menuitem is selected,
  5.  *   that menu will be destroyed and a new menu will be created.
  6.  *
  7.  *   Windows Version 2.0 function demonstration application
  8.  *
  9.  */
  10.  
  11. #include "windows.h"
  12.  
  13. long    FAR PASCAL WndProc (HWND, unsigned, WORD, LONG);
  14.  
  15. HMENU hMenu;
  16.  
  17. int     PASCAL WinMain (hInstance, hPrevInstance, lpszCmdLine, cmdShow)
  18. HANDLE hInstance, hPrevInstance;
  19. LPSTR lpszCmdLine;
  20. int    cmdShow;
  21.   {
  22.   MSG   msg;
  23.   HWND  hWnd;
  24.  
  25.   if (!hPrevInstance)
  26.     {
  27.     WNDCLASS   wcClass;
  28.  
  29.     wcClass.style          = CS_HREDRAW | CS_VREDRAW;
  30.     wcClass.lpfnWndProc    = WndProc;
  31.     wcClass.cbClsExtra     = 0;
  32.     wcClass.cbWndExtra     = 0;
  33.     wcClass.hInstance      = hInstance;
  34.     wcClass.hIcon          = LoadIcon (hInstance, NULL);
  35.     wcClass.hCursor        = LoadCursor (NULL, IDC_ARROW);
  36.     wcClass.hbrBackground  = (HBRUSH)GetStockObject (WHITE_BRUSH);
  37.     wcClass.lpszMenuName   = (LPSTR)NULL;
  38.     wcClass.lpszClassName  = (LPSTR)"DestroyMenu";
  39.  
  40.     if (!RegisterClass ( (LPWNDCLASS) & wcClass))
  41.       return FALSE;
  42.     }
  43.  
  44.   hMenu = CreateMenu ();
  45.   ChangeMenu (hMenu, NULL, "Add MenuItem", 100, MF_APPEND);
  46.  
  47.   hWnd = CreateWindow ( (LPSTR)"DestroyMenu",
  48.                       (LPSTR)"DestroyMenu ()",
  49.                       WS_OVERLAPPEDWINDOW,
  50.                       CW_USEDEFAULT,
  51.                       CW_USEDEFAULT,
  52.                       CW_USEDEFAULT,
  53.                       CW_USEDEFAULT,
  54.                       (HWND)NULL,        /* no parent */
  55.                       (HMENU)hMenu,      /* use class menu */
  56.                       (HANDLE)hInstance, /* handle to window instance */
  57.                       (LPSTR)NULL);      /* no params to pass on */
  58.  
  59.   ShowWindow (hWnd, cmdShow);
  60.   UpdateWindow (hWnd);
  61.  
  62.   while (GetMessage ( (LPMSG) & msg, NULL, 0, 0))
  63.     {
  64.     TranslateMessage ( (LPMSG) & msg);
  65.     DispatchMessage ( (LPMSG) & msg);
  66.     }
  67.   return (int)msg.wParam;
  68.   }
  69.  
  70. /* Procedures which make up the window class. */
  71. long    FAR PASCAL WndProc (hWnd, message, wParam, lParam)
  72. HWND     hWnd;
  73. unsigned message;
  74. WORD     wParam;
  75. LONG     lParam;
  76.   {
  77.   switch (message)
  78.     {
  79.     case WM_DESTROY:
  80.       PostQuitMessage (0);
  81.       break;
  82.  
  83.     case WM_COMMAND:
  84.       switch (wParam)
  85.         {
  86.         case 100:
  87.           SetMenu (hWnd, NULL);  /*  No Menu for the Window while we play  */
  88.           DestroyMenu (hMenu);   /*  Trash the Menu  */
  89.           hMenu = CreateMenu (); /*  Create a new one  */
  90.           ChangeMenu (hMenu, NULL, "Delete Extra MenuItem  ", 105, MF_APPEND);
  91.           ChangeMenu (hMenu, NULL, "  Extra MenuItem", 110, MF_APPEND);
  92.           SetMenu (hWnd, hMenu);  /*  Change the menu for the window  */
  93.           break;
  94.  
  95.         case 105:
  96.           SetMenu (hWnd, NULL);
  97.           DestroyMenu (hMenu);
  98.           hMenu = CreateMenu ();
  99.           ChangeMenu (hMenu, NULL, "Add MenuItem", 100, MF_APPEND);
  100.           SetMenu (hWnd, hMenu);
  101.           break;
  102.  
  103.         case 110:
  104.           MessageBox (GetFocus(), "Extra MenuItem Was Selected",
  105.                       "Extra MenuItem", MB_OK | MB_ICONEXCLAMATION);
  106.           break;
  107.  
  108.         default:
  109.           return DefWindowProc (hWnd, message, wParam, lParam);
  110.         }
  111.       break;
  112.  
  113.     default:
  114.       return DefWindowProc (hWnd, message, wParam, lParam);
  115.       break;
  116.     }
  117.   return (0L);
  118.   }
  119.