Enumerando cores
Você pode determinar quantas cores um dispositivo dá suporte e quais são essas cores recuperando a contagem de cores para o dispositivo e enumerando as cores das canetas sólidas. Para recuperar o número de cores, use a função GetDeviceCaps com o valor NUMCOLORS. Para enumerar canetas sólidas, use a função EnumObjects e uma função de retorno de chamada correspondente que recebe informações sobre cada caneta.
// GetTheColors - returns the count and color values of solid colors
// Returns a pointer to the array containing colors
// hdc - handle to device context
COLORREF *GetTheColors(HDC hdc)
{
int cColors;
COLORREF *aColors;
// Get the number of colors.
cColors = GetDeviceCaps(hdc, NUMCOLORS);
// Allocate space for the array.
aColors = (COLORREF *)LocalAlloc(LPTR, sizeof(COLORREF) *
(cColors+1));
// Save the count of colors in first element.
aColors[0] = (LONG)cColors;
// Enumerate all pens and save solid colors in the array.
EnumObjects(hdc, OBJ_PEN, (GOBJENUMPROC)MyEnumProc, (LONG)aColors);
// Refresh the count of colors.
aColors[0] = (LONG)cColors;
return aColors;
}
int MyEnumProc(LPVOID lp, LPBYTE lpb)
{
LPLOGPEN lopn;
COLORREF *aColors;
int iColor;
lopn = (LPLOGPEN)lp;
aColors = (COLORREF *)lpb;
if (lopn->lopnStyle==PS_SOLID)
{
// Check for too many colors.
if ((iColor = (int)aColors[0]) <= 0)
return 0;
aColors[iColor] = lopn->lopnColor;
aColors[0]--;
}
return 1;
}