home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / m / m003_1 / sb_bc.ddi / BC / CH6 / WACCEL-1.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-18  |  3.6 KB  |  136 lines

  1. /***    Windows Application --- Accelerator example     ***/
  2. /***                                                    ***/
  3. /***    WACCEL-1 includes                               ***/
  4. /***            (1) WACCEL-1.C                          ***/
  5. /***            (2) WACCEL-1.DEF                        ***/
  6. /***            (3) WACCEL.RES                          ***/
  7.  
  8. #pragma hdrfile "windows.sym"
  9. #include <windows.h>
  10. #pragma hdrstop
  11.  
  12. #include "wmenu.h"
  13.  
  14. // Declaration
  15.  
  16. void InitFirstInstance(HANDLE) ;
  17. void InitEachInstance(HANDLE, int) ;
  18. long FAR PASCAL AppWndProc (HWND, WORD, WORD, LONG) ;
  19.  
  20. static char  szAppName[]  = "WinMenu" ;
  21. static char  szMenuName[] = "WMENU" ;
  22. static char  szAccelName[]= "WACCELTAB" ;
  23. HWND  hwnd ;
  24.  
  25. // Definition
  26.  
  27. int PASCAL WinMain(HANDLE hInstance,
  28.            HANDLE hPrevInstance,
  29.            LPSTR  lpszCmdLine,
  30.            int    nCmdShow)
  31. { HANDLE hAccel ;
  32.   MSG msg ;
  33.  
  34.   if ( !hPrevInstance ) InitFirstInstance(hInstance) ;
  35.  
  36.   InitEachInstance(hInstance,nCmdShow) ;
  37.  
  38.   hAccel = LoadAccelerators(hInstance, szAccelName) ;
  39.  
  40.   while ( GetMessage(&msg, NULL, 0, 0) )
  41.     { if ( !TranslateAccelerator(hwnd, hAccel, &msg) )
  42.      { TranslateMessage(&msg) ;
  43.        DispatchMessage(&msg) ;
  44.      }
  45.     }
  46.   return msg.wParam ;
  47. }
  48.  
  49.  
  50. void InitFirstInstance(HANDLE hInstance)
  51. { WNDCLASS wndclass ;
  52.  
  53.   wndclass.style      = CS_HREDRAW | CS_VREDRAW ;
  54.   wndclass.lpfnWndProc      = AppWndProc ;
  55.   wndclass.cbClsExtra       = 0 ;
  56.   wndclass.cbWndExtra      = 0 ;
  57.   wndclass.hInstance      = hInstance ;
  58.   wndclass.hIcon             = LoadIcon(NULL,IDI_APPLICATION) ;
  59.   wndclass.hCursor      = LoadCursor(NULL,IDC_ARROW) ;
  60.   wndclass.hbrBackground  = GetStockObject(WHITE_BRUSH) ;
  61.   wndclass.lpszMenuName      = szMenuName ;
  62.   wndclass.lpszClassName  = szAppName ;
  63.  
  64.   RegisterClass(&wndclass) ;
  65. }
  66.  
  67.  
  68. void InitEachInstance(HANDLE hInstance, int nCmdShow)
  69. {
  70.   hwnd = CreateWindow(szAppName,               // window class name
  71.               "Windows Application", // window caption
  72.               WS_OVERLAPPEDWINDOW ,
  73.               CW_USEDEFAULT,      // initial x position
  74.               0,                  // initial y position
  75.               CW_USEDEFAULT,      // initial x length
  76.               0,                  // initial y length
  77.               NULL,               // parent window handle
  78.               NULL,               // window menu handle
  79.               hInstance,          // program instance handle
  80.               NULL) ;             // parameters
  81.  
  82.   ShowWindow(hwnd,nCmdShow) ;
  83.   UpdateWindow(hwnd) ;
  84. }
  85.  
  86.  
  87. long FAR PASCAL AppWndProc (HWND hwnd,
  88.                 WORD message,
  89.                 WORD wParam,
  90.                 LONG lParam)
  91. { static WORD Cursor_Check = IDM_CURSOR1,
  92.           Icon_Check   = IDM_ICON1,
  93.           Bitmap_Check = IDM_BITMAP1 ;
  94.   HMENU hMenu ;
  95.  
  96.   switch (message)
  97.     { case WM_COMMAND :
  98.        hMenu = GetMenu(hwnd) ;
  99.        switch(wParam)
  100.          { case IDM_CURSOR1 :
  101.            case IDM_CURSOR2 :
  102.            case IDM_CURSOR3 :
  103.             CheckMenuItem(hMenu, Cursor_Check, MF_UNCHECKED) ;
  104.             Cursor_Check = wParam ;
  105.             CheckMenuItem(hMenu, Cursor_Check, MF_CHECKED) ;
  106.             break ;
  107.  
  108.            case IDM_ICON1 :
  109.            case IDM_ICON2 :
  110.             CheckMenuItem(hMenu, Icon_Check, MF_UNCHECKED) ;
  111.             Icon_Check = wParam ;
  112.             CheckMenuItem(hMenu, Icon_Check, MF_CHECKED) ;
  113.             break ;
  114.  
  115.            case IDM_BITMAP1 :
  116.            case IDM_BITMAP2 :
  117.            case IDM_BITMAP3 :
  118.             CheckMenuItem(hMenu, Bitmap_Check, MF_UNCHECKED) ;
  119.             Bitmap_Check = wParam ;
  120.             CheckMenuItem(hMenu, Bitmap_Check, MF_CHECKED) ;
  121.             break ;
  122.          }
  123.        break ;
  124.  
  125.       case WM_DESTROY :
  126.        PostQuitMessage(0) ;
  127.        break ;
  128.  
  129.       default :
  130.        return DefWindowProc(hwnd, message, wParam, lParam) ;
  131.     }
  132.  
  133.   return 0 ;
  134. }
  135.  
  136.