Из этой таблицы видны недостатки
Таблица 2
Параметр функции GetDeviceCaps | CGA | EGA | VGA | SVGA 800x 600 | 8514/A | SVGA 1024 x 768 |
HORZRES | 640 | 640 | 640 | 800 | 1024 | 1024 |
VERTRES | 200 | 350 | 480 | 600 | 760 | 768 |
HORZSIZE | 240 | 240 | 208
| 208 | 280 | 208 |
VERTSIZE | 180 | 175 | 156 | 152 | 210 | 152 |
ASPECTX | 5 | 38 | 36 | 36 | 10 | 36 |
ASPECTY | 12 | 48 | 36 | 36 | 14 | 36 |
ASPECTXY | 13 | 61 | 51 | 51 | 14 | 51 |
LOGPIXELSX | 96 | 96 | 96 | 96 | 120 | 96 |
LOGPIXELSY | 48 | 72 | 96 | 96 | 120 | 96 |
Во-первых, вертикальное (VERTRES) и горизонтальное (HORZRES) разрешение зависит от типа видеоконтроллера.
Во-вторых, физические размеры пикселов (ASPECTX и ASPECTY ), и, что самое главное, отношение высоты и ширины пиксела также зависят от типа видеоконтроллера.
Если приложению требуется нарисовать, например, окружность или квадрат, при использовании физической системы координат придется учитывать форму пикселов, выполняя масштабирование изображения по одной из осей координат. В противном случае вместо окружности и квадрата на экране появятся эллипс и прямоугольник.
Таблица 2
Код растровой операции | Логическое выражение | Описание |
SRCCOPY | S | Исходное изображение копируется в контекст отображения |
SRCPAINT | S | D | Цвет полученного изображения определяется при помощи логической операции ИЛИ над цветом изображения и цветом фона |
SRCAND | S & D | Цвет полученного изображения определяется при помощи логической операции И над цветом изображения и цветом фона |
SRCINVERT | S ^ D | Цвет полученного изображения определяется при помощи логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ над цветом изображения и цветом фона |
SRCERASE | S & ~D | Цвет фона инвертируется, затем выполняется операция И над результатом и цветом исходного изображения |
NOTSRCCOPY | ~S | После рисования цвет изображения получается инвертированием цвета исходного изображения |
NOTSRCERASE | ~(S | D) | Цвет полученного изображения получается инвертированием результата логической операции ИЛИ над цветом изображения и цветом фона |
MERGECOPY | P & S | Выполняется логическая операции И над цветом исходного изображения и цветом кисти |
MERGEPAINT | ~S | D | Выполняется логическая операции ИЛИ над инвертированным цветом исходного изображения и цветом фона |
PATCOPY | P | Выполняется копирование цвета кисти |
PATPAINT | P | ~S | D | Цвет кисти комбинируется с инвертированным цветом исходного изображения, при этом используется логическая операция ИЛИ. Полученный результат комбинируется с цветом фона, также с помощью логической операции ИЛИ |
PATINVERT | P ^ D | Цвет полученного изображения определяется при помощи логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ над цветом кисти и цветом фона |
DSTINVERT | ~D | Инвертируется цвет фона |
BLACKNESS | 0 | Область закрашивается черным цветом |
WHITENESS | 1 | Область закрашивается белым цветом |
Для рисования битовых изображений можно использовать вместо функции BitBlt функцию StretchBlt , с помощью которой можно выполнить масштабирование (сжатие или растяжение) битовых изображений: BOOL WINAPI StretchBlt( HDC hdcDest, // контекст для рисования int nXDest, // x-координата верхнего левого угла // области рисования int nYDest, // y-координата верхнего левого угла // области рисования int nWidthDest, // новая ширина изображения int nHeightDest, // новая высота изображения HDC hdcSrc, // идентификатор исходного контекста int nXSrc, // x-координата верхнего левого угла // исходной области int nYSrc, // y-координата верхнего левого угла // исходной области int nWidthSrc, // ширина исходного изображения int nHeightSrc, // высота исходного изображения DWORD dwRop); // код растровой операции
Параметры этой функции аналогичны параметрам функции BitBlt, за исключением того, что ширина и высота исходного и полученного изображения должна определяться отдельно. Размеры исходного изображения (логические) задаются параметрами nWidthSrc и nHeightSrc, размеры нарисованного изображения задаются параметрами nWidthDest и nHeightDest.
Возвращаемое значение равно TRUE при успешном завершении или FALSE при ошибке.
Следует упомянуть также еще одну функцию, которая сама по себе не может рисовать битовые изображения, но часто используется для закраски прямоугольных областей экрана. Эта функция имеет имя PatBlt : BOOL WINAPI PatBlt( HDC hdc, // контекст для рисования int nX, // x-координата верхнего левого угла // закрашиваемой области int nY, // y-координата верхнего левого угла // закрашиваемой области int nWidth, // ширина области int nHeight, // высота области DWORD dwRop); // код растровой операции
При использовании этой функции вы можете закрашивать области экрана с использованием следующих кодов растровых операций: PATCOPY, PATINVERT, PATPAINT, DSTINVERT, BLACKNESS, WHITENESS.
Возвращаемое функцией PatBlt значение равно TRUE при успешном завершении или FALSE при ошибке.
Таблица 2
Начертание | Образец шрифта |
Normal | AaBbCcDdEeFfGgHhIiJjKkLl АаБбВвГгДдЕеЖжЗзИиКкЛлМмНн |
Bold | AaBbCcDdEeFfGgHhIiJjKkLl АаБбВвГгДдЕеЖжЗзИиКкЛлМмНн |
Italic | AaBbCcDdEeFfGgHhIiJjKkLl АаБбВвГгДдЕеЖжЗзИиКкЛлМмНнОоПпРр |
Еще один часто используемый атрибут оформления строк текста - подчеркивание: Текст с подчеркиванием
Иногда используется шрифт с перечеркнутыми буквами.
GDI выполняет подчеркивание самостоятельно, файлы шрифтов не содержат глифы с подчеркиванием.
Растровые и векторные шрифты хранятся в системном каталоге Windows в файлах с расширением имени fon.
Глифы масштабируемых шрифтов True Type находятся в файлах с расширением имени ttf, причем сами эти файлы могут располагаться в любом каталоге. В процессе регистрации масштабируемого шрифта Windows создает в своем системном каталоге файлы с расширением имени fot, которые содержат ссылки на соответствующие ttf-файлы.
С помощью приложения Control Panel вы можете добавлять или удалять любые шрифты. Следует, однако, учитывать ограничение: в системе можно одновременно использовать не более 253, к тому же для представления жирного и наклонного начертания используются отдельные масштабируемые шрифты. Чрезмерное количество установленных шрифтов может привести к снижению производительности системы.