// clear the existing palette
SetSystemPaletteUse (hdc, SYSPAL_NOSTATIC);
SetSystemPaletteUse (hdc, SYSPAL_STATIC);
PALETTEENTRY *pPeDest = &pe.palPalEntry[0];
for (int iOn=0; iOn<255; iOn++, pPeDest++)
	{
	pPeDest->peRed = 0;
	pPeDest->peGreen = 0;
	pPeDest->peBlue = 0;
	pPeDest->peFlags = PC_NOCOLLAPSE;
	}
hPal = CreatePalette (&pe);
HPALETTE hOldPal = SelectPalette (hdc, hPal, FALSE);
RealizePalette (hdc);
SelectPalette (hdc, hOldPal, FALSE);
RealizePalette (hdc);

// get the system palette entries
int iNumSys = GetDeviceCaps (hdc, NUMCOLORS);
GetSystemPaletteEntries (hdc, 0, 256, pe.palPalEntry);

// set to the new color table
RGBQUAD *pRgbDest = &bmi.rgb[0];
pPeDest = &pe.palPalEntry[0];

// first system colors
for (iOn=0; iOn<iNumSys/2; iOn++, pRgbDest++, pPeDest++)
	{
	pRgbDest->rgbRed = pPeDest->peRed;
	pRgbDest->rgbGreen = pPeDest->peGreen;
	pRgbDest->rgbBlue = pPeDest->peBlue;
	pRgbDest->rgbReserved = 0;
	}

// our colors
RGBQUAD _far *pRgbSrc = ((RGBQUAD _far *) (&bmi + 1)) + iNumSys / 2;
for (; iOn<256-iNumSys/2; iOn++, pRgbDest++, pPeDest++, pRgbSrc++)
	{
	pRgbDest->rgbRed = pPeDest->peRed = pRgbSrc->rgbRed;
	pRgbDest->rgbGreen = pPeDest->peGreen = pRgbSrc->rgbGreen;
	pRgbDest->rgbBlue = pPeDest->peBlue = pRgbSrc->rgbBlue;
	pPeDest->peFlags = PC_RESERVED;
	}

// the last system colors
for (; iOn<256; iOn++, pRgbDest++, pPeDest++)
	{
	pRgbDest->rgbRed = pPeDest->peRed;
	pRgbDest->rgbGreen = pPeDest->peGreen;
	pRgbDest->rgbBlue = pPeDest->peBlue;
	}

// set the palette & WinG bitmap
DeleteObject (hPal);
hPal = CreatePalette (&pe);
SelectPalette (hdc, hPal, FALSE);
RealizePalette (hdc);
WinGSetDIBColorTable (gDC, 0, 256, bmi.rgb);

// OK, now Windows & WinG are set to the new palette.
// Don't forget to paint <g>	
