home *** CD-ROM | disk | FTP | other *** search
/ CICA 1995 May / cica_0595_4.zip / cica_0595_4 / UTIL / MSWSRC35 / COLORDLG.CPP < prev    next >
C/C++ Source or Header  |  1993-10-12  |  5KB  |  178 lines

  1. // ObjectWindows - (C) Copyright 1992 by Borland International
  2.  
  3. #include "allwind.h"
  4.  
  5. const unsigned int CN_CLICKED = 0;
  6. const unsigned int CN_DBLCLICKED = 1;
  7.  
  8. #ifdef __DLL__
  9. extern PTModule TheModule;
  10. #else
  11. PTModule TheModule = NULL;
  12. #endif
  13.  
  14.  
  15. TColorControl::TColorControl(PTWindowsObject AParent, int ResourceId,
  16. COLORREF AColor, PTModule AModule)
  17. : TControl(AParent, ResourceId, AModule)
  18.    {
  19.    Color = AColor;
  20.    DisableTransfer();
  21.    }
  22.  
  23. LPSTR TColorControl::GetClassName()
  24.    {
  25.    return "ColorControl";
  26.    }
  27.  
  28. void TColorControl::GetWindowClass(WNDCLASS& AWndClass)
  29.    {
  30.    TControl::GetWindowClass(AWndClass);
  31.    AWndClass.style |= CS_DBLCLKS;
  32.    }
  33.  
  34. void TColorControl::Paint(HDC DC, PAINTSTRUCT& PS)
  35.    {
  36.    LOGBRUSH ALogBrush;
  37.    HBRUSH NewBrush;
  38.    HBRUSH OldBrush;
  39.    int oldentries;
  40.    
  41.    ALogBrush.lbStyle = BS_SOLID;
  42.    ALogBrush.lbColor = Color;
  43.    
  44.    if (EnablePalette)
  45.       {
  46.       oldentries = MyLogPalette->palNumEntries;
  47.       ALogBrush.lbColor = LoadColor(GetRValue(Color),GetGValue(Color),GetBValue(Color));
  48.       OldPalette = SelectPalette(DC, ThePalette, FALSE);
  49.       RealizePalette(DC);
  50.       }
  51.    
  52.    NewBrush = CreateBrushIndirect(&ALogBrush);
  53.    OldBrush = (HBRUSH)SelectObject(DC, NewBrush);
  54.    Rectangle(DC, PS.rcPaint.left, PS.rcPaint.top, PS.rcPaint.right,
  55.    PS.rcPaint.bottom);
  56.    SelectObject(DC, OldBrush);
  57.    DeleteObject(NewBrush);
  58.    
  59.    if (EnablePalette)
  60.       {
  61.       SelectPalette(DC, OldPalette, FALSE);
  62.       MyLogPalette->palNumEntries = oldentries;
  63.       DeleteObject(ThePalette);
  64.       if (status_flag) update_status_paletteuse();
  65.       ThePalette = CreatePalette(MyLogPalette);
  66.       }
  67.    }
  68.  
  69. void TColorControl::SetColor(COLORREF AColor)
  70.    {
  71.    Color = AColor;
  72.    InvalidateRect(HWindow, NULL, TRUE);
  73.    }
  74.  
  75. WORD TColorControl::Transfer(void *DataPtr, WORD TransferFlag)
  76.    {
  77.    if ( TransferFlag == TF_GETDATA )
  78.       {
  79.       memcpy(DataPtr, &Color, sizeof Color);
  80.       }
  81.    else
  82.    if ( TransferFlag == TF_SETDATA )
  83.    memcpy(&Color, DataPtr, sizeof Color);
  84.    return sizeof(Color);
  85.    }
  86.  
  87. void TColorControl::WMLButtonDown(RTMessage)
  88.    {
  89.    SendMessage(Parent->HWindow, WM_COMMAND, Attr.Id,
  90.    MAKELONG(HWindow, CN_CLICKED));
  91.    }
  92.  
  93. void TColorControl::WMLButtonDblClk(RTMessage)
  94.    {
  95.    SendMessage(Parent->HWindow, WM_COMMAND, Attr.Id,
  96.    MAKELONG(HWindow, CN_DBLCLICKED));
  97.    }
  98.  
  99. static void DisableChildTransfer(void *P, void *)
  100.    {
  101.    ((PTWindowsObject)P)->DisableTransfer();
  102.    }
  103.  
  104. TColorDialog::TColorDialog(TWindowsObject *AParent, COLORREF& TheColor, char *caption)
  105. : TDialog(AParent, "COLORDIALOG", TheModule)
  106.    {
  107.    colorcaption = caption;
  108.    new TColorControl(this, ID_COLOR1, RGB(0x00, 0x00, 0x00), TheModule);
  109.    new TColorControl(this, ID_COLOR2, RGB(0xFF, 0xFF, 0xFF), TheModule);
  110.    new TColorControl(this, ID_COLOR3, RGB(0xFF, 0x00, 0x00), TheModule);
  111.    new TColorControl(this, ID_COLOR4, RGB(0x00, 0xFF, 0x00), TheModule);
  112.    new TColorControl(this, ID_COLOR5, RGB(0x00, 0x00, 0xFF), TheModule);
  113.    new TColorControl(this, ID_COLOR6, RGB(0x00, 0xFF, 0xFF), TheModule);
  114.    new TColorControl(this, ID_COLOR7, RGB(0xFF, 0x00, 0xFF), TheModule);
  115.    new TColorControl(this, ID_COLOR8, RGB(0xFF, 0xFF, 0x00), TheModule);
  116.    ColorBar1 = new TScrollBar(this, ID_COLORBAR1, TheModule);
  117.    ColorBar2 = new TScrollBar(this, ID_COLORBAR2, TheModule);
  118.    ColorBar3 = new TScrollBar(this, ID_COLORBAR3, TheModule);
  119.    ForEach(DisableChildTransfer, 0);
  120.    SelColor = new TColorControl(this, ID_SELCOLOR, TheColor, TheModule);
  121.    SelColor->EnableTransfer();
  122.    TransferBuffer = &TheColor;
  123.    }
  124.  
  125. void TColorDialog::DefChildProc(RTMessage Msg)
  126.    {
  127.    TColorControl *TheControl;
  128.    
  129.    if ( Msg.WParam <= ID_COLORBAR3 )
  130.       {
  131.       SelColor->SetColor(RGB((unsigned int)ColorBar1->GetPosition(),
  132.       (unsigned int)ColorBar2->GetPosition(),
  133.       (unsigned int)ColorBar3->GetPosition()));
  134.       }
  135.    else
  136.       {
  137.       TheControl = (TColorControl *)ChildWithId(Msg.WParam);
  138.       SelColor->SetColor(TheControl->Color);
  139.       UpdateBars(TheControl->Color);
  140.       if (Msg.LP.Hi == CN_DBLCLICKED)
  141.          {
  142.          CloseWindow(IDOK);
  143.          }
  144.       }
  145.    }
  146.  
  147. void TColorDialog::SetupWindow()
  148.    {
  149.    TDialog::SetupWindow();
  150.    ColorBar1->SetRange(0, 255);
  151.    ColorBar2->SetRange(0, 255);
  152.    ColorBar3->SetRange(0, 255);
  153.    //   ColorBar1->TrackMode = TRUE;
  154.    //   ColorBar2->TrackMode = TRUE;
  155.    //   ColorBar3->TrackMode = TRUE;
  156.    SetCaption(colorcaption);
  157.    }
  158.  
  159. void TColorDialog::TransferData(WORD TransferFlag)
  160.    {
  161.    TDialog::TransferData(TransferFlag);
  162.    if ( TransferFlag == TF_SETDATA )
  163.       {
  164.       UpdateBars(SelColor->Color);
  165.       }
  166.    }
  167.  
  168. void TColorDialog::UpdateBars(COLORREF AColor)
  169.    {
  170.    ColorBar1->SetRange(0, 255);
  171.    ColorBar2->SetRange(0, 255);
  172.    ColorBar3->SetRange(0, 255);
  173.    ColorBar1->SetPosition(GetRValue(AColor));
  174.    ColorBar2->SetPosition(GetGValue(AColor));
  175.    ColorBar3->SetPosition(GetBValue(AColor));
  176.    }
  177.  
  178.