home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 7 Games / 07-Games.zip / CHECKOS2.ZIP / CHECKERS.C < prev    next >
C/C++ Source or Header  |  1989-09-30  |  5KB  |  145 lines

  1. /*--------------------------------------------------------------------
  2.    CHECKERS.C source code file, version 0.10 (draws board and pieces)
  3.               (c) 1990, Charles Petzold
  4.   --------------------------------------------------------------------*/
  5.  
  6. #define INCL_WIN
  7. #include <os2.h>
  8. #include "checkers.h"
  9. #include "ckrdraw.h"
  10.  
  11. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2) ;
  12. MRESULT EXPENTRY AboutDlgProc  (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2) ;
  13.  
  14. HAB  hab ;
  15.  
  16. int main (void)
  17.      {
  18.      static CHAR  szClientClass[] = "Checkers" ;
  19.      static ULONG flFrameFlags = FCF_TITLEBAR      | FCF_SYSMENU  |
  20.                                  FCF_SIZEBORDER    | FCF_MINMAX   |
  21.                                  FCF_SHELLPOSITION | FCF_TASKLIST |
  22.                                  FCF_MENU ;
  23.      HMQ          hmq ;
  24.      HWND         hwndFrame, hwndClient ;
  25.      QMSG         qmsg ;
  26.  
  27.      hab = WinInitialize (0) ;
  28.      hmq = WinCreateMsgQueue (hab, 0) ;
  29.      WinRegisterClass (hab, szClientClass, ClientWndProc, CS_SIZEREDRAW, 0) ;
  30.  
  31.      hwndFrame = WinCreateStdWindow (HWND_DESKTOP, WS_VISIBLE,
  32.                                      &flFrameFlags, szClientClass, NULL,
  33.                                      0L, NULL, ID_RESOURCE, &hwndClient) ;
  34.  
  35.      while (WinGetMsg (hab, &qmsg, NULL, 0, 0))
  36.           WinDispatchMsg (hab, &qmsg) ;
  37.  
  38.      WinDestroyWindow (hwndFrame) ;
  39.      WinDestroyMsgQueue (hmq) ;
  40.      WinTerminate (hab) ;
  41.      return 0 ;
  42.      }
  43.  
  44. MRESULT EXPENTRY ClientWndProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  45.      {
  46.      static BOARD brd = { 0x00000FFF, 0xFFF00000, 0x00000000 } ;
  47.      static HPS   hps ;
  48.      static HWND  hwndMenu ;
  49.      static SHORT sBottom = BLACK ;
  50.  
  51.      switch (msg)
  52.           {
  53.           case WM_CREATE:
  54.                hwndMenu = WinWindowFromID (
  55.                               WinQueryWindow (hwnd, QW_PARENT, FALSE),
  56.                               FID_MENU) ;
  57.  
  58.                hps = CkdCreatePS (hwnd) ;
  59.                return 0 ;
  60.  
  61.           case WM_SIZE:
  62.                CkdResizePS (hps, hwnd) ;
  63.                CkdDestroyPieces () ;
  64.                CkdCreatePieces (hps) ;
  65.                return 0 ;
  66.  
  67.           case WM_PAINT:
  68.                WinBeginPaint (hwnd, hps, NULL) ;
  69.  
  70.                CkdDrawWindowBackground (hps, hwnd) ;
  71.                CkdDrawWholeBoard (hps) ;
  72.                CkdDrawAllPieces (hps, &brd, sBottom) ;
  73.  
  74.                WinEndPaint (hps) ;
  75.                return 0 ;
  76.  
  77.           case WM_COMMAND:
  78.                switch (COMMANDMSG (&msg)->cmd)
  79.                     {
  80.                     case IDM_BOTTOM:
  81.                          WinSendMsg (hwndMenu, MM_SETITEMATTR,
  82.                                      MPFROM2SHORT (IDM_BOTTOM, TRUE),
  83.                                      MPFROM2SHORT (MIA_CHECKED,
  84.                                         sBottom ? MIA_CHECKED : 0)) ;
  85.                          sBottom ^= 1 ;
  86.                          WinInvalidateRect (hwnd, NULL, FALSE) ;
  87.                          return 0 ;
  88.  
  89.                     case IDM_ABOUT:
  90.                          WinDlgBox (HWND_DESKTOP, hwnd, AboutDlgProc,
  91.                                     NULL, IDD_ABOUT_DLG, NULL) ;
  92.                          return 0 ;
  93.  
  94.                     case IDM_COLOR_BACKGROUND:
  95.                     case IDM_COLOR_BLACK_SQUARE:
  96.                     case IDM_COLOR_WHITE_SQUARE:
  97.                     case IDM_COLOR_BLACK_PIECE:
  98.                     case IDM_COLOR_WHITE_PIECE:
  99.                          if (!WinDlgBox (HWND_DESKTOP, hwnd, ColorDlgProc,
  100.                                          NULL, IDD_COLOR_DLG,
  101.                                          &(COMMANDMSG (&msg)->cmd)))
  102.                               return 0 ;
  103.  
  104.                          if (COMMANDMSG (&msg)->cmd == IDM_COLOR_BLACK_PIECE ||
  105.                              COMMANDMSG (&msg)->cmd == IDM_COLOR_WHITE_PIECE)
  106.                               {
  107.                               CkdDestroyPieces () ;
  108.                               CkdCreatePieces (hps) ;
  109.                               }
  110.                          WinInvalidateRect (hwnd, NULL, FALSE) ;
  111.                          return 0 ;
  112.  
  113.                     case IDM_COLOR_STANDARD:
  114.                          CkdSetStandardColors () ;
  115.                          CkdDestroyPieces () ;
  116.                          CkdCreatePieces (hps) ;
  117.                          WinInvalidateRect (hwnd, NULL, FALSE) ;
  118.                          return 0 ;
  119.                     }
  120.                break ;
  121.  
  122.           case WM_DESTROY:
  123.                CkdDestroyPieces () ;
  124.                CkdDestroyPS (hps) ;
  125.                return 0 ;
  126.           }
  127.      return WinDefWindowProc (hwnd, msg, mp1, mp2) ;
  128.      }
  129.  
  130. MRESULT EXPENTRY AboutDlgProc (HWND hwnd, USHORT msg, MPARAM mp1, MPARAM mp2)
  131.      {
  132.      switch (msg)
  133.           {
  134.           case WM_COMMAND:
  135.                switch (COMMANDMSG(&msg)->cmd)
  136.                     {
  137.                     case DID_OK:
  138.                     case DID_CANCEL:
  139.                          WinDismissDlg (hwnd, TRUE) ;
  140.                          return 0 ;
  141.                     }
  142.           }
  143.      return WinDefDlgProc (hwnd, msg, mp1, mp2) ;
  144.      }
  145.