home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c082_144 / 2.ddi / CHESS.ZIP / COLORS.CPP < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-10  |  9.2 KB  |  331 lines

  1. // ObjectWindows - (C) Copyright 1992 by Borland International
  2.  
  3. #include <static.h>
  4. #include <filedial.h>
  5. #include <inputdia.h>
  6. #include <bwcc.h>
  7. #include <string.h>
  8. #include <stdio.h>
  9.  
  10. #include "wcdefs.h"
  11. #include "info.h"
  12. #include "wchess.h"
  13. #include "edit.h"
  14. #include "colors.h"
  15. #include "externs.h"
  16.  
  17. #define min(x, y)   (((x) < (y)) ? (x) : (y))
  18. #define max(x, y)   (((x) > (y)) ? (x) : (y))
  19.  
  20. TColorsDialog::TColorsDialog(PTWindowsObject AParent, LPSTR AName)
  21.    : TDialog(AParent, AName)
  22.    {
  23.    }
  24.  
  25. TColorsDialog::~TColorsDialog()
  26. {
  27.    DeleteObject(hSBBrush[Red]);
  28.    DeleteObject(hSBBrush[Green]);
  29.    DeleteObject(hSBBrush[Blue]);
  30. }
  31. inline void TColorsDialog::CLSetFocus(HWND hWnd)
  32. {
  33.    SendMessage(HWindow, WM_NEXTDLGCTL, WPARAM(hWnd), 1L);
  34.    SendMessage(hWnd, EM_SETSEL, 0, MAKELONG(0, 32767));
  35. }
  36.  
  37.  
  38. BOOL TColorsDialog::GetColorValue(WORD Id)
  39. {
  40.    int NewVal;
  41.    BOOL Ok;
  42.    BYTE *CurVal;
  43.    HWND hScroller, hButton;
  44.  
  45.    NewVal = GetDlgItemInt(HWindow, Id, &Ok, TRUE);
  46.  
  47.    switch (Id)
  48.       {
  49.       case IDD_WEDITRED:
  50.          CurVal = &WSqColors[0];
  51.          hScroller = GetDlgItem(HWindow, IDD_WRED);
  52.          hButton = WhiteSq;
  53.          break;
  54.       case IDD_WEDITGREEN:
  55.          CurVal = &WSqColors[1];
  56.          hScroller = GetDlgItem(HWindow, IDD_WGREEN);
  57.          hButton = WhiteSq;
  58.          break;
  59.       case IDD_WEDITBLUE:
  60.          CurVal = &WSqColors[2];
  61.          hScroller = GetDlgItem(HWindow, IDD_WBLUE);
  62.          hButton = WhiteSq;
  63.          break;
  64.       case IDD_BEDITRED:
  65.          CurVal = &BSqColors[0];
  66.          hScroller = GetDlgItem(HWindow, IDD_BRED);
  67.          hButton = BlackSq;
  68.          break;
  69.       case IDD_BEDITGREEN:
  70.          CurVal = &BSqColors[1];
  71.          hScroller = GetDlgItem(HWindow, IDD_BGREEN);
  72.          hButton = BlackSq;
  73.          break;
  74.       case IDD_BEDITBLUE:
  75.          CurVal = &BSqColors[2];
  76.          hScroller = GetDlgItem(HWindow, IDD_BBLUE);
  77.          hButton = BlackSq;
  78.          break;
  79.       }
  80.  
  81.    if (Ok)
  82.       {
  83.       Ok = (NewVal > 255) ? FALSE : ( (NewVal < 0 ) ? FALSE : TRUE );
  84.       }
  85.    else 
  86.       NewVal = *CurVal;
  87.      
  88.    if (!Ok)
  89.       {
  90.       Error("Please enter a valid number between 0 and 255.");
  91.       CLSetFocus(GetDlgItem(HWindow, Id));
  92.       }
  93.    else if (NewVal != *CurVal)
  94.       {
  95.       *CurVal = NewVal;
  96.       SetScrollPos(hScroller, SB_CTL, *CurVal, TRUE);
  97.       InvalidateRect(hButton, 0, FALSE);
  98.       }
  99.    return Ok;
  100. }
  101.  
  102. void TColorsDialog::Ok(RTMessage)
  103. {
  104.    MSG msg;
  105.  
  106.    while (PeekMessage(&msg, HWindow, CL_KILLFOCUS, CL_KILLFOCUS, PM_NOREMOVE))
  107.       continue;
  108.  
  109.    if ( GetColorValue(IDD_WEDITRED) && GetColorValue(IDD_WEDITGREEN) &&
  110.       GetColorValue(IDD_WEDITBLUE) && GetColorValue(IDD_BEDITRED) &&
  111.       GetColorValue(IDD_BEDITGREEN) && GetColorValue(IDD_BEDITBLUE))
  112.       {
  113.       memcpy(WhiteSquareColors, WSqColors, sizeof(WSqColors));
  114.       memcpy(BlackSquareColors, BSqColors, sizeof(BSqColors));
  115.       CloseWindow(IDOK);
  116.       }
  117. }
  118.  
  119. void TColorsDialog::SetupWindow()
  120. {
  121.    TDialog::SetupWindow();
  122.    memcpy(WSqColors, WhiteSquareColors, sizeof(WSqColors));
  123.    memcpy(BSqColors, BlackSquareColors, sizeof(BSqColors));
  124.    SetDlgItemInt(HWindow, IDD_WEDITRED, WSqColors[0], FALSE);
  125.    SetDlgItemInt(HWindow, IDD_WEDITGREEN, WSqColors[1], FALSE);
  126.    SetDlgItemInt(HWindow, IDD_WEDITBLUE, WSqColors[2], FALSE);
  127.  
  128.    SetScrollRange(GetDlgItem(HWindow, IDD_WRED), SB_CTL, 0, 255, FALSE);
  129.    SetScrollPos(GetDlgItem(HWindow, IDD_WRED), SB_CTL, WSqColors[0], FALSE);
  130.    SetScrollRange(GetDlgItem(HWindow, IDD_WGREEN), SB_CTL, 0, 255, FALSE);
  131.    SetScrollPos(GetDlgItem(HWindow, IDD_WGREEN), SB_CTL, WSqColors[1], FALSE);
  132.    SetScrollRange(GetDlgItem(HWindow, IDD_WBLUE), SB_CTL, 0, 255, FALSE);
  133.    SetScrollPos(GetDlgItem(HWindow, IDD_WBLUE), SB_CTL, WSqColors[2], FALSE);
  134.  
  135.    SetDlgItemInt(HWindow, IDD_BEDITRED, BSqColors[0], FALSE);
  136.    SetDlgItemInt(HWindow, IDD_BEDITGREEN, BSqColors[1], FALSE);
  137.    SetDlgItemInt(HWindow, IDD_BEDITBLUE, BSqColors[2], FALSE);
  138.  
  139.    SetScrollRange(GetDlgItem(HWindow, IDD_BRED), SB_CTL, 0, 255, FALSE);
  140.    SetScrollPos(GetDlgItem(HWindow, IDD_BRED), SB_CTL, BSqColors[0], FALSE);
  141.    SetScrollRange(GetDlgItem(HWindow, IDD_BGREEN), SB_CTL, 0, 255, FALSE);
  142.    SetScrollPos(GetDlgItem(HWindow, IDD_BGREEN), SB_CTL, BSqColors[1], FALSE);
  143.    SetScrollRange(GetDlgItem(HWindow, IDD_BBLUE), SB_CTL, 0, 255, FALSE);
  144.    SetScrollPos(GetDlgItem(HWindow, IDD_BBLUE), SB_CTL, BSqColors[2], FALSE);
  145.  
  146.  
  147.    RWID = GetDlgCtrlID(GetDlgItem(HWindow, IDD_WRED));
  148.    GWID = GetDlgCtrlID(GetDlgItem(HWindow, IDD_WGREEN));
  149.    BWID = GetDlgCtrlID(GetDlgItem(HWindow, IDD_WBLUE));
  150.  
  151.    RBID = GetDlgCtrlID(GetDlgItem(HWindow, IDD_BRED));
  152.    GBID = GetDlgCtrlID(GetDlgItem(HWindow, IDD_BGREEN));
  153.    BBID = GetDlgCtrlID(GetDlgItem(HWindow, IDD_BBLUE));
  154.  
  155.    WStatic = GetDlgCtrlID(WhiteSq = GetDlgItem(HWindow, IDD_WHITECOLOR));
  156.    BStatic = GetDlgCtrlID(BlackSq = GetDlgItem(HWindow, IDD_BLACKCOLOR));
  157.  
  158.    hSBBrush[Red] = CreateSolidBrush(RGB(255, 0, 0));
  159.    hSBBrush[Green] = CreateSolidBrush(RGB(0, 255, 0));
  160.    hSBBrush[Blue] = CreateSolidBrush(RGB(0, 0, 255));
  161. }
  162.  
  163. void TColorsDialog::WMControlColor(RTMessage msg)    
  164. {
  165.    int ID = GetDlgCtrlID(HWND(msg.LP.Lo));
  166.  
  167.    switch (msg.LP.Hi)
  168.       {
  169.       case CTLCOLOR_SCROLLBAR :
  170.          if (RWID == ID) 
  171.             msg.Result = long(hSBBrush[Red]);
  172.          else if (GWID == ID)
  173.             msg.Result = long(hSBBrush[Green]);
  174.          else if (BWID == ID)
  175.             msg.Result = long(hSBBrush[Blue]);
  176.          else if (RBID == ID )
  177.             msg.Result = long(hSBBrush[Red]);
  178.          else if (GBID == ID)
  179.             msg.Result = long(hSBBrush[Green]);
  180.          else if (BBID == ID)
  181.             msg.Result = long(hSBBrush[Blue]);
  182.          else
  183.             DefWndProc(msg);
  184.          break;
  185.       default:
  186.          DefWndProc(msg);
  187.       }
  188. }
  189.  
  190. void TColorsDialog::WMVScroll(RTMessage msg)
  191. {
  192.    int ID = GetDlgCtrlID(HWND(msg.LP.Hi));
  193.    BYTE *color;
  194.    HWND hScroller, hButton;
  195.    int dlgitem;
  196.  
  197.     if (RWID == ID)
  198.       {
  199.       color = &WSqColors[0];
  200.       hScroller = GetDlgItem(HWindow, IDD_WRED);
  201.       dlgitem = IDD_WEDITRED;
  202.       hButton = WhiteSq;
  203.       }
  204.     else if (RBID == ID)
  205.       {
  206.       color = &BSqColors[0];
  207.       hScroller = GetDlgItem(HWindow, IDD_BRED);
  208.       dlgitem = IDD_BEDITRED;
  209.       hButton = BlackSq;
  210.       }
  211.     else if (BBID == ID)
  212.       {
  213.       color = &BSqColors[2];
  214.       hScroller = GetDlgItem(HWindow, IDD_BBLUE);
  215.       dlgitem = IDD_BEDITBLUE;
  216.       hButton = BlackSq;
  217.       }
  218.     else if (BWID == ID)
  219.       {
  220.       color = &WSqColors[2];
  221.       hScroller = GetDlgItem(HWindow, IDD_WBLUE);
  222.       dlgitem = IDD_WEDITBLUE;
  223.       hButton = WhiteSq;
  224.       }
  225.     else if (GBID == ID)
  226.       {
  227.       color = &BSqColors[1];
  228.       hScroller = GetDlgItem(HWindow, IDD_BGREEN);
  229.       dlgitem = IDD_BEDITGREEN;
  230.       hButton = BlackSq;
  231.       }
  232.     else if (GWID == ID)
  233.       {
  234.       color = &WSqColors[1];
  235.       hScroller = GetDlgItem(HWindow, IDD_WGREEN);
  236.       dlgitem = IDD_WEDITGREEN;
  237.       hButton = WhiteSq;
  238.       }
  239.          else return;
  240.      switch (msg.WParam)
  241.          {
  242.          case SB_PAGEDOWN :
  243.             *color += 15;
  244.          case SB_LINEDOWN :
  245.             *color = min(255, *color + 1);
  246.             break;
  247.          case SB_PAGEUP :
  248.             *color -= 15;
  249.          case SB_LINEUP :
  250.             *color = max(0, *color - 1);
  251.             break;
  252.          case SB_TOP:
  253.             *color = 0;
  254.             break;
  255.          case SB_BOTTOM :
  256.             *color = 255;
  257.             break;
  258.          case SB_THUMBPOSITION :
  259.          case SB_THUMBTRACK :
  260.             *color = msg.LP.Lo;
  261.             break;
  262.          default:
  263.             break;
  264.          }
  265.       SetScrollPos(hScroller, SB_CTL, *color, TRUE);
  266.       SetDlgItemInt(HWindow, dlgitem, *color, FALSE);
  267.       InvalidateRect(hButton, 0, FALSE);
  268. }
  269.  
  270. void TColorsDialog::WMDrawItem(RTMessage msg)
  271. {
  272.    LPDRAWITEMSTRUCT lpDI = (LPDRAWITEMSTRUCT)msg.LParam;
  273.    BYTE *colors;
  274.    LPRECT lpR;
  275.  
  276.    HBRUSH hOldBrush;
  277.  
  278.    if (lpDI->itemAction != ODA_DRAWENTIRE)
  279.       return;
  280.  
  281.    if (lpDI->CtlID == WStatic)
  282.       colors = WSqColors;
  283.    else if (lpDI->CtlID == BStatic)
  284.       colors = BSqColors;
  285.    else
  286.       return;
  287.  
  288.    hOldBrush = (HBRUSH)SelectObject(lpDI->hDC,
  289.       CreateSolidBrush(RGB(colors[0], colors[1], colors[2])));
  290.  
  291.    lpR = &(lpDI->rcItem);
  292.  
  293.    Rectangle(lpDI->hDC, lpR->left, lpR->top, lpR->right, lpR->bottom);
  294.    DeleteObject(SelectObject(lpDI->hDC, hOldBrush));
  295. }
  296.  
  297.  
  298. void TColorsDialog::CLKillFocus(RTMessage msg)
  299. {
  300.    WORD Id = msg.WParam;
  301.    HWND Focus = GetFocus();
  302.  
  303.    if ( ( GetDlgItem(HWindow, Id) == Focus || 
  304.       GetDlgItem(HWindow, IDCANCEL) == Focus ) ||
  305.       GetActiveWindow() != HWindow)
  306.       return;
  307.    GetColorValue(Id);   
  308. }
  309.  
  310.  
  311. void TColorsDialog::WMCommand(RTMessage msg)
  312. {
  313.    WORD ID = msg.WParam;
  314.  
  315.    if (msg.LP.Lo)
  316.       {
  317.       switch (msg.LP.Hi)
  318.          {
  319.          case EN_KILLFOCUS:
  320.             if (SendMessage(HWND(msg.LP.Lo), EM_GETMODIFY, 0, 0L))
  321.                PostMessage(HWindow, CL_KILLFOCUS, ID, 0L);
  322.          default:
  323.             TWindowsObject::WMCommand(msg);
  324.             return;
  325.          }
  326.       }
  327.    else
  328.       TWindowsObject::WMCommand(msg);
  329. }
  330.  
  331.