Enumerar colores
Puedes determinar cuántos colores admite un dispositivo y cuáles son esos colores recuperando el recuento de colores del dispositivo y enumerando los colores de los lápices sólidos. Para recuperar el número de colores, use la función GetDeviceCaps con el valor NUMCOLORS. Para enumerar los lápices sólidos, use la función EnumObjects y una función de devolución de llamada correspondiente que reciba información sobre cada lápiz.
// 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;
}