home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / listings / v_11_09 / 1109028a < prev    next >
Text File  |  1993-04-20  |  2KB  |  96 lines

  1. Listing 1  Initializing and Installing
  2.            a Logical Palette
  3.  
  4.  
  5. /* Global Variables: */
  6.  
  7. struct xLOGPALETTE
  8. {
  9.  WORD         palVersion;
  10.  WORD         palNumEntries;
  11.  PALETTEENTRY palPalEntry[256];
  12. } logpal;
  13.  
  14. HPALETTE newPalette = NULL;
  15. HPALETTE oldPalette = NULL;
  16. WORD oldPaletteUsage = 0xFFFF;
  17.  
  18. #define FOREGROUND 0
  19.  
  20. /*--------------------------------------------------*/
  21.  
  22. int FAR PASCAL SetGrayScalePalette (hWnd)
  23. /*
  24.   This function initializes and installs a gray
  25.   scale palette into the system palette.
  26. */
  27.   HWND hWnd;
  28.  
  29.   {
  30.    int result,i;
  31.    HDC hDC;
  32.  
  33.    result = NO_ERROR;
  34.  
  35.    if (newPalette == NULL)
  36.    {
  37.     /* Initialize logical palette: */
  38.     logpal.palVersion = 0x0300;
  39.     logpal.palNumEntries = 256;
  40.  
  41.     for (i = 0; i < 256; i++)
  42.     {
  43.      logpal.palPalEntry[i].peRed = (BYTE)i;
  44.      logpal.palPalEntry[i].peGreen = (BYTE)i;
  45.      logpal.palPalEntry[i].peBlue = (BYTE)i;
  46.      logpal.palPalEntry[i].peFlags = 0;
  47.     }
  48.  
  49.     /* Create new palette: */
  50.     newPalette = CreatePalette((LPLOGPALETTE)&logpal);
  51.     if (newPalette != NULL)
  52.     {
  53.      hDC = GetDC(hWnd);
  54.      if (hDC != NULL)
  55.      {
  56.       /* Select new palette; save current palette: */
  57.       oldPalette = SelectPalette(hDC,
  58.                                  newPalette,
  59.                                  FOREGROUND);
  60.       if (oldPalette != NULL)
  61.       {
  62.        /*
  63.          This call sets the use of the 20 static
  64.          colors in the system palette. In this case,
  65.          these colors are preserved in the new
  66.          palette (SYSPAL_STATIC).
  67.        */
  68.        oldPaletteUsage = SetSystemPaletteUse(hDC,
  69.                                       SYSPAL_STATIC);
  70.  
  71.        /*
  72.          The call to UnrealizeObject instructs GDI
  73.          to treat the specified palette as if it were
  74.          never before submitted to GDI. As a result,
  75.          when RealizePalette is then called, the GDI
  76.          will remap the entire system palette using
  77.          the new logical palette.
  78.        */
  79.        UnrealizeObject(newPalette);
  80.        RealizePalette(hDC);
  81.       }
  82.       else result = PAL_SELECT_ERROR;
  83.  
  84.       ReleaseDC(hWnd,hDC);
  85.      }
  86.      else result = PAL_HDC_ERROR;
  87.  
  88.      if (result != NO_ERROR) DeleteObject(newPalette);
  89.     }
  90.     else result = PAL_CREATE_ERROR;
  91.    }
  92.  
  93.    return result;
  94.   } /* SetGrayScalePalette */
  95.  
  96.