Вы можете выяснить, сколько цветов устройство поддерживает и чем эти цвета являются, извлекая количество цветов для устройства и перечисляя цвета сплошных перьев. Чтобы извлечь число цветов, используйте функцию GetDeviceCaps со значением NUMCOLORS. Чтобы перечислить сплошные перья, используйте функцию EnumObjects и соответствующую функцию обратного вызова, которая получает информацию о каждом пере.
Демонстрационный пример
// GetTheColors - возвращает число и коды чистого цвета
// Возвращает указатель на массив, содержащий цвета
// hdc - дескриптор контекста устройства
COLORREF *GetTheColors(HDC hdc)
{
int cColors;
COLORREF *aColors;
// Получите число цветов.
cColors = GetDeviceCaps(hdc, NUMCOLORS);
// Назначьте пространство для массива.
aColors = (COLORREF *)LocalAlloc(LPTR, sizeof(COLORREF) *
(cColors+1));
// Сохраните количество цветов в первом элементе.
aColors[0] = (LONG)cColors;
// Перечислите все перья и сохраните сплошные цвета в массиве.
EnumObjects(hdc, OBJ_PEN, (GOBJENUMPROC)MyEnumProc, (LONG)aColors);
// Обновите количество цветов.
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)
{
// Проверка не слишком ли много цветов.
if ((iColor = (int)aColors[0]) <= 0)
return 0;
aColors[iColor] = lopn->lopnColor;
aColors[0]--;
}
return 1;
}
|