STDPAL.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. /*-----------------------------------------------------------------------
  2. |   stdpal.c
  3. |
  4. |   Standard App Palette useful for OLE applications.
  5. |   Use OleStdCreateStandardPalette API to create the palette.
  6. |
  7. |   Copyright (c) 1992 - 1997 Microsoft Corporation. All rights reserved.
  8. |
  9. -----------------------------------------------------------------------*/
  10. #ifndef PC_RESERVED
  11. #include <windows.h>
  12. #endif
  13. #include <olestd.h>
  14. #include "stdpal.h"
  15. #define cpeAppPal 256  // number of colors in our apps palette
  16. typedef struct
  17.    {
  18.    WORD wVersion;
  19.    WORD cpe;
  20.    PALETTEENTRY rgpe[cpeAppPal];
  21.    } LOGPAL;
  22. /*-----------------------------------------------------------------------
  23. |   OleStdCreateStandardPalette
  24. |
  25. |       Creates the standard Apps palette.  Create one of these for your
  26. |   app, and select/realize it into each DC.
  27. |
  28. |   Arguments:
  29. |       void:
  30. |
  31. |   Returns:
  32. |
  33. |   Keywords:
  34. -----------------------------------------------------------------------*/
  35. STDAPI_(HPALETTE) OleStdCreateStandardPalette(void)
  36.    {
  37.    HDC hdc;
  38.    HPALETTE hpal;
  39.    hpal = (HPALETTE) NULL;
  40.    hdc = GetDC(NULL);
  41.    if (hdc != NULL && GetDeviceCaps(hdc, RASTERCAPS) & RC_PALETTE)
  42.       {
  43.       int cpeSysPal;
  44.       int cpeReserved;
  45.       cpeSysPal = GetDeviceCaps(hdc, SIZEPALETTE);
  46.       cpeReserved = GetDeviceCaps(hdc, NUMRESERVED);
  47.       if (cpeSysPal > cpeReserved)
  48.          {
  49.          int cpeReserved2;
  50.          unsigned char FAR* lpb;
  51.          PALETTEENTRY FAR* ppe;
  52.          PALETTEENTRY FAR* ppeMac;
  53.          LOGPAL logpal;
  54.          cpeReserved2 = cpeReserved/2;
  55.          // Get the system palette entries at the beginning and end.
  56.          GetSystemPaletteEntries(hdc, 0, cpeReserved2, logpal.rgpe);
  57.          GetSystemPaletteEntries(hdc, cpeSysPal - cpeReserved2, cpeReserved2,
  58.             &logpal.rgpe[cpeAppPal-cpeReserved2]);
  59.          logpal.cpe = cpeAppPal;
  60.          logpal.wVersion = 0x300;
  61.          lpb = (BYTE FAR *) &palSVGA[10];
  62.          ppe = (PALETTEENTRY FAR*)&logpal.rgpe[cpeReserved2];
  63.          ppeMac = (PALETTEENTRY FAR*)&logpal.rgpe[cpeAppPal-cpeReserved2];
  64.          while (ppe < ppeMac)
  65.             {
  66.             ppe->peFlags = PC_NOCOLLAPSE;
  67.             ppe->peRed   = *lpb++;
  68.             ppe->peGreen = *lpb++;
  69.             ppe->peBlue  = *lpb++;
  70.             ppe++;
  71.             }
  72.          hpal = CreatePalette((LOGPALETTE FAR *)&logpal);
  73.          }
  74.       }
  75.    ReleaseDC(NULL, hdc);
  76.    return hpal;
  77.    }