Операционная система Microsoft Windows 3.1 для программиста
© Александр Фролов, Григорий Фролов
Том 11, М.: Диалог-МИФИ, 1993, 269 стр.
В программном интерфейсе Windows имеется функция
GetDeviceCaps, позволяющая по контексту определить
возможности и параметры драйвера,
обслуживающего устройство ввода/вывода.
Функция GetDeviceCaps имеет следующий прототип:
int WINAPI GetDeviceCaps(HDC hdc, int iCapability);
Первый параметр функции (hdc) задает контекст
устройства, для которого необходимо получить
информацию о его возможностях. Вы можете,
например, указать значение, полученное от
функции BeginPaint или GetDC.
Второй параметр (iCapability) определяет параметр
устройства, значение которого необходимо
получить.
Приведем список возможных значений для второго
параметра функции GetDeviceCaps. Все эти значения
определены как символьные константы в файле
windows.h.
Имя константы |
Описание |
ASPECTX |
Относительная ширина отдельного
пиксела, который используется при рисовании
линий |
ASPECTXY |
Относительная длина диагонали
отдельного пиксела, который используется при
рисовании линий |
ASPECTY |
Относительная высота отдельного
пиксела, который используется при рисовании
линий |
BITSPIXEL |
Количество бит, используемых для
представления цвета в одном пикселе |
CLIPCAPS |
Возможности устройства по ограничению
области вывода:
CP_NONE вывод не ограничивается;
CP_RECTANGLE вывод ограничивается прямоугольной
областью;CP_REGION вывод ограничивается
произвольной областью |
COLORRES |
Цветовое разрешение устройства в битах
на пиксел. Это значение можно использовать
только для устройств, использующих цветовые
палитры, что можно определить при помощи
константы RASTERCAPS.
Данную константу можно использовать только для
драйверов версии 3.0 и более поздних версий |
CURVECAPS |
Способность устройства рисовать
различные кривые линии и геометрические фигуры.
Возвращаемое значение представляет собой набор
битовых масок, установленных в 1, если устройство
может само рисовать различные фигуры:
CC_CIRCLES окружности;
CC_CHORD сегмент эллипса;
CC_ELLIPSES эллипсы;
CC_INTERIORS устройство может закрашивать внутреннюю
область геометрических фигур;
CC_NONE устройство не может рисовать кривые линии и
геометрические фигуры;
CC_PIE секторы эллипса;
CC_ROUNDRECT прямоугольники со скругленными углами;
CC_STYLED устройство может рисовать рамки с
использованием различных стилей (штриховые,
пунктирные, штрих-пунктирные и т.д.);
CC_WIDE широкие рамки;
CC_WIDESTYLED устройство может рисовать широкие рамки
с использованием различных стилей (штриховые,
пунктирные, штрих-пунктирные и т. д.) |
DRIVERVERSION |
Номер версии драйвера устройства.
Значение 0x300 соответствует версии 3.0, значение 0x30a
- версии 3.1 |
HORZRES |
Ширина экрана в пикселах. Для принтеров -
ширина рабочей области, в пределах которой может
выполняться печать |
HORZSIZE |
Стандартная для данного разрешения
ширина дисплея в миллиметрах |
LINECAPS |
Способности устройства рисовать линии.
Возвращаемое значение представляет собой набор
битовых масок, установленных в 1, если устройство
может само рисовать линии различного типа:
LC_INTERIORS устройство может закрашивать внутреннюю
область;
LC_MARKER маркеры;
LC_NONE устройство не может рисовать линии;
LC_POLYLINE ломаные линии;
LC_POLYMARKER линии polymarker;
LC_STYLED устройство может рисовать линии с
использованием различных стилей (штриховые,
пунктирные, штрих пунктирные и т.д.);
LC_WIDE широкие линии;
LC_WIDESTILED устройство может рисовать широкие линии
с использованием различных стилей (штриховые,
пунктирные, штрих-пунктирные и т. д.) |
LOGPIXELSX |
Количество пикселов на один логический
дюйм по горизонтали |
LOGPIXELSY |
Количество пикселов на один логический
дюйм по вертикали |
NUMBRUSHES |
Количество кистей, поддерживаемых
устройством |
NUMCOLORS |
Количество цветов, зарезервированных
Windows для использования в цветовых палитрах
устройства, то есть количество чистых цветов,
которые может использовать устройство. Для
драйверов монохромных устройств возвращается
значение 2. Для плоттеров это значение
соответствует количеству цветных перьев |
NUMFONTS |
Количество шрифтов, поддерживаемых
устройством |
NUMMARKERS |
Количество маркеров, поддерживаемых
устройством |
NUMPENS |
Количество перьев, поддерживаемых
устройством |
NUMRESERVED |
Количество зарезервированных элементов
в системной палитре. Это значение определено
только для устройств, использующих цветовые
палитры, что можно выяснить при помощи константы
RASTERCAPS.
Данную константу можно использовать только для
драйверов версии 3.0 и более поздних версий |
PDEVICESIZE |
Размер внутренней структуры данных PDEVICE |
PLANES |
Количество цветовых слоев |
POLYGONALCAPS |
Способности устройства рисовать
многоугольники. Возвращаемое значение
представляет собой набор битовых масок,
установленных в 1, если устройство может само
рисовать многоугольники различного типа:
PC_INTERIORS устройство может закрашивать внутреннюю
область;
PC_NONE устройство не может рисовать
многоугольники;
PC_RECTANGLE прямоугольники;
PC_SCANLINES устройство может выполнять сканирование
линий растра;
PC_STYLED устройство может рисовать рамки с
использованием различных стилей (штриховые,
пунктирные, штрих-пунктирные и т. д.);
PC_WIDE широкие рамки;
PC_WIDESTILED устройство может рисовать широкие рамки
с использованием различных стилей (штриховые,
пунктирные, штрих-пунктирные и т. д.)
PC_WINDPOLYGON многоугольники с заполнением в режиме
WINDING |
RASTERCAPS |
Набор битовых масок, определяющих
способность устройства выполнять растровые
операции:
RC_BANDING для устройства требуется поддержка
операции banding - функции GDI должны выводить данные
небольшими сегментами, формирующими изображение
(используется устройствами печати);
RC_BIGFONT устройство поддерживает шрифты, размером
большем чем 64 Кбайт;
RC_BITBLT устройство может выполнять перемещение
участков изображения в виде битовых образов
(bitmap);
RC_BITMAP64 устройство может работать с битовыми
образами большого размера (больше 64 Кбайт);
RC_DEVBITS есть поддержка битовых образов со стороны
устройства;
RC_DI_BITMAP устройство поддерживает выполнение
функций SetDIBits и GetDIBits;
RC_DIBTODEV устройство поддерживает выполнение
функции SetDIBitsToDevice;
RC_FLOODFILL устройство может выполнять заливку фигур;
RC_GDI20_OUTPUT драйвер устройства поддерживает
особенности Windows версии 2.0;
RC_GDI20_STATE контекст устройства содержит блок
состояния устройства;
RC_NONE устройство не выполняет растровых операций;
RC_OP_DX_OUTPUT устройство поддерживает режим
непрозрачности и массив DX;
RC_PALETTE устройство использует палитры цветов;
RC_SAVEBITMAP устройство может локально сохранять
битовые образы (bitmap);
RC_SCALING поддерживается операция масштабирования;
RC_STRETCHBLT устройство поддерживает функцию StretchBlt;
RC_STRETCHDIB устройство поддерживает функцию StretchDIBits |
SIZEPALETTE |
Размер таблицы палитры. Это значение
можно использовать только для устройств,
использующих цветовые палитры, что можно
определить при помощи константы RASTERCAPS |
TECHNOLOGY |
Тип устройства или технология, с
использованием которой сделано устройство:
DT_CHARSTREAM устройство работает с потоком символов;
DT_DISPFILE файл отображения;
DT_METAFILE метафайл;
DT_PLOTTER векторный плоттер;
DT_RASDISPLAY растровый дисплей;
DT_RASPRINTER растровый принтер;
DT_RASCAMERA растровая камера |
TEXTCAPS |
Набор битовых масок, определяющих
способность устройства выполнять операции с
текстом:
TC_OP_CHARACTER точность соответствия запрашиваемого и
предоставленного шрифта. Если установлен этот
бит, устройство может обеспечить запрошенные
атрибуты символов;TC_OP_STROKE устройство может
обеспечить необходимую высоту, ширину,
ориентацию и атрибуты текста;
TC_CP_STROKE точность вывода допускает обрезание
символов шрифта для того, чтобы текст появился
только внутри заданной области ограничения;
TC_CR_90 устройство может поворачивать символы
только на угол, кратный 90 градусам;
TC_CR_ANY устройство может поворачивать символы на
любой угол;
TC_SF_X_YINDEP устройство может масштабировать свой
шрифт по вертикальной и горизонтальной оси;
TC_SA_DOUBLE устройство может удваивать размер своего
шрифта;
TC_SA_INTEGER устройство может увеличивать размер
своего шрифта в любое целое количество раз;
TC_SA_CONTIN устройство может выполнять произвольное
масштабирование своего шрифта, сохраняя
отношение между вертикальным и горизонтальным
размером шрифта;
TC_EA_DOUBLE устройство может увеличивать жирность
своего шрифта в два раза;
TC_IA_ABLE устройство может делать свой шрифт
наклонным (italic);
TC_UA_ABLE устройство может делать свой шрифт
подчеркнутым;
TC_SO_ABLE устройство может делать свой шрифт
перечеркнутым;
TC_RA_ABLE устройство способно перечислять растровые
шрифты или шрифты TrueType при вызове функций EnumFonts
или EnumFontFamilies;
TC_VA_ABLE устройство способно перечислять векторные
шрифтов при вызове функций EnumFonts или EnumFontFamilies;
TC_RESERVED не используется |
VERTRES |
Высота дисплея в пикселах. Для принтеров
- высота рабочей области, в которой принтер
способен выполнять печать |
VERTSIZE |
Стандартная высота дисплея в
миллиметрах |
Не все перечисленные выше значения будут сразу
вам нужны, поэтому мы остановимся только на
некоторых из них.
Значения ASPECTX, ASPECTY, ASPECTXY определяют размеры
пиксела. Зачем вам могут понадобиться размеры
пиксела? Дело в том, что пикселы не всегда
квадратные (или круглые). Поэтому в некоторых
режимах работы видеоадаптера масштаб
изображения по оси x может отличаться от масштаба
по оси y. Размеры пиксела позволят вам вычислить
отношение сторон пиксела и выполнить правильное
масштабирование. В этом случае отображаемые вами
окружности будут круглыми, а квадраты -
квадратными.
Иногда бывает важно знать цветовое разрешение
устройства вывода. Для этого можно использовать
значение BITSPIXEL, которое соответствует количеству
бит, используемых для представления цвета. Если
возвести число 2 в степень значения BITSPIXEL,
получится количество цветов, которое может быть
представлено одним пикселом.
Некоторые устройства работают с цветовыми
плоскостями. Количество этих плоскостей можно
определить, пользуясь значением PLANES. Об
использовании цветовых плоскостей можно
прочитать в третьем томе "Библиотеки
системного программиста", который называется
"Программирование видеоадаптеров CGA, EGA и VGA".
Отметим, что количество цветов, которые могут
быть представлены устройством с цветовыми
плоскостями, равно 2n, где n - количество цветовых
плоскостей.
Если устройство работает с цветовыми
плоскостями и использует несколько бит для
представления цвета одного пиксела, количество
одновременно отображаемых цветов можно
определить по формуле:
nColors = 2(nPixel * nPlanes),
где nPixel - количество битов, используемых для
представления цвета пиксела (значение BITSPIXEL); nPlanes
- количество цветовых плоскостей (значение PLANES).
Значение NUMCOLORS равно количеству цветов при
использовании одной палитры. Так как палитра
может быть перегружена, фактически вы можете
использовать больше цветов, чем указано в NUMCOLORS.
Но в этом случае вы должны сами перезагружать
палитру. Для устройств, работающих с палитрами,
правильное количество используемых цветов
возвращается при использовании значения COLORRES.
|