home *** CD-ROM | disk | FTP | other *** search
/ C Programming Starter Kit 2.0 / SamsPublishing-CProgrammingStarterKit-v2.0-Win31.iso / bc45 / pallet.pak / PALETTEX.CPP < prev    next >
C/C++ Source or Header  |  1997-07-23  |  4KB  |  147 lines

  1. //----------------------------------------------------------------------------
  2. // ObjectWindows - (C) Copyright 1991, 1993 by Borland International
  3. //----------------------------------------------------------------------------
  4. #include <owl\owlpch.h>
  5. #include <owl\applicat.h>
  6. #include <owl\framewin.h>
  7. #include <owl\dialog.h>
  8. #include <owl\dc.h>
  9. #include <alloc.h>
  10. #include "palettex.h"
  11.  
  12. const int BoxW = 20;
  13. const int BoxH = 20;
  14. const NumColors = 48;
  15. const TColor Colors[NumColors] = {
  16.   0x00FFFFFFl,0x00E0E0E0l,0x00C0C0FFl,0x00C0E0FFl,0x00E0FFFFl,0x00C0FFC0l,
  17.   0x00FFFFC0l,0x00FFC0C0l,0x00FFC0FFl,0x000000C0l,0x000040C0l,0x0000C0C0l,
  18.   0x0000C000l,0x00C0C000l,0x00C00000l,0x00C000C0l,
  19.   0x00C0C0C0l,0x00404040l,0x008080FFl,0x0080C0FFl,0x0080FFFFl,0x0080FF80l,
  20.   0x00FFFF80l,0x00FF8080l,0x00FF80FFl,0x00000080l,0x00004080l,0x00008080l,
  21.   0x00008000l,0x00808000l,0x00800000l,0x00800080l,
  22.   0x00808080l,0x00000000l,0x000000FFl,0x000080FFl,0x0000FFFFl,0x0000FF00l,
  23.   0x00FFFF00l,0x00FF0000l,0x00FF00FFl,0x00000040l,0x00404080l,0x00004040l,
  24.   0x00004000l,0x00404000l,0x00400000l,0x00400040l
  25. };
  26.  
  27. class TTestWindow : public TWindow {
  28.   public:
  29.     LOGPALETTE* MyLogPalette; // Logical palette struct filled with colors
  30.     BOOL        PalDevice;    // does display have a physical palette?
  31.  
  32.     TTestWindow();
  33.     ~TTestWindow();
  34.  
  35.     void EvSize(UINT, TSize &);
  36.     void EvPaint();
  37.     void EvLButtonDown(UINT, TPoint&);
  38.     void CmAbout();
  39.  
  40.   DECLARE_RESPONSE_TABLE(TTestWindow);
  41. };
  42. DEFINE_RESPONSE_TABLE1(TTestWindow, TWindow)
  43.   EV_WM_SIZE,
  44.   EV_WM_PAINT,
  45.   EV_WM_LBUTTONDOWN,
  46.   EV_COMMAND(CM_ABOUT, CmAbout),
  47. END_RESPONSE_TABLE;
  48.  
  49. TTestWindow::TTestWindow()
  50.   : TWindow(0, 0, 0)
  51. {
  52.   MyLogPalette = (LOGPALETTE*)new char[sizeof(LOGPALETTE) + sizeof(PALETTEENTRY) * NumColors];
  53.   MyLogPalette->palVersion = 0x300;
  54.   MyLogPalette->palNumEntries = NumColors;
  55.   for (int i = 0; i < NumColors; ++i) {
  56.     MyLogPalette->palPalEntry[i].peRed = Colors[i].Red();
  57.     MyLogPalette->palPalEntry[i].peGreen = Colors[i].Green();
  58.     MyLogPalette->palPalEntry[i].peBlue = Colors[i].Blue();
  59.     MyLogPalette->palPalEntry[i].peFlags = PC_RESERVED;
  60.   }
  61.   
  62.   TScreenDC  screenDC;
  63.   PalDevice = (screenDC.GetDeviceCaps(RASTERCAPS) & RC_PALETTE) ? TRUE : FALSE;
  64. }
  65.  
  66. TTestWindow::~TTestWindow()
  67. {
  68.   delete MyLogPalette;
  69. }
  70.  
  71. void
  72. TTestWindow::EvSize(UINT, TSize &)
  73. {
  74.   Invalidate(TRUE);
  75. }
  76.  
  77. void
  78. TTestWindow::EvPaint()
  79. {
  80.   TPaintDC paintDC(HWindow);
  81.   TPalette Palette(MyLogPalette);
  82.   paintDC.SelectObject(Palette);
  83.   paintDC.RealizePalette();
  84.  
  85.   TRect rect;
  86.   GetClientRect(rect);
  87.   int hc = rect.Width() / BoxW;
  88.   for (int i = 0; i < NumColors; i++) {
  89.     TColor palColor(i);
  90.     TBrush brush(palColor);
  91.     paintDC.SelectObject(brush);
  92.     int x = (i % hc) * BoxW;  
  93.     int y = (i / hc) * BoxH;
  94.     paintDC.Rectangle(x, y, x+BoxW, y+BoxH);
  95.     paintDC.RestoreBrush();
  96.   }
  97.   paintDC.RestorePalette();
  98. }
  99.  
  100. void
  101. TTestWindow::EvLButtonDown(UINT, TPoint&)
  102. {
  103.   PALETTEENTRY PaletteEntry = MyLogPalette->palPalEntry[0];
  104.   for (int i = 0; i < NumColors-1; i++)
  105.     MyLogPalette->palPalEntry[i] = MyLogPalette->palPalEntry[i + 1];
  106.   MyLogPalette->palPalEntry[i] = PaletteEntry;
  107.  
  108.   if (PalDevice) {
  109.     TClientDC paintDC(HWindow);
  110.     TPalette Palette(MyLogPalette);
  111.     paintDC.SelectObject(Palette);
  112.     paintDC.RealizePalette();
  113.     paintDC.RestorePalette();
  114.   } else
  115.     Invalidate(FALSE);
  116. }
  117.  
  118. void
  119. TTestWindow::CmAbout()
  120. {
  121.   TDialog(this, "ABOUT").Execute();
  122. }
  123.  
  124. //----------------------------------------------------------------------------
  125.  
  126. class TTestApp : public TApplication {
  127.   public:
  128.   TTestApp() : TApplication() {}
  129.   virtual void InitMainWindow();
  130. };
  131.  
  132. void
  133. TTestApp::InitMainWindow()
  134. {
  135.   TFrameWindow* frame = new TFrameWindow(0, "Palette Tester", new TTestWindow);
  136.   frame->AssignMenu("PALTEST_MENU");
  137.   frame->EnableKBHandler();
  138.   MainWindow = frame;
  139. }
  140.  
  141. int
  142. OwlMain(int /*argc*/, char* /*argv*/ [])
  143. {
  144.   TTestApp app;
  145.   return app.Run();
  146. }
  147.