Вы можете выяснить, сколько цветов устройство поддерживает и чем эти цвета являются, извлекая количество цветов для устройства и перечисляя цвета сплошных перьев. Чтобы извлечь число цветов, используйте функцию 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; } |