Интерфейс графических устройств, страница 5

См.    \local-sources\chapl2\12-04.txtРисунок 12.1. Пример применения функции CreateFont

нием этого контекста приложение определяет число битов на пиксель и число цветовых плоскостей для дисплея. Для монитора SVGA эти характеристики соответствуют 8 битам и 1 цветовой плоскости.

Си.    \local-sou

rces\chap!2\12-05. txt

CreateScalableFontResource            * Windows 98   + Windows 2000

Описание

При  использовании  в приложении,  в котором установлены шрифты TrueType, функция   CreateScalableFontResource создает файл  ресурса шрифта для масштабируемого шрифта. В настоящее время поддерживаются только шрифты  TrueType. В приложении можно вызвать функцию CreateScalableFontResource для создания файла ресурса шрифта (обычно с расширением имени файла .FOT), а затем — функцию AddFontResource для установки шрифта.

Синтаксис

BOOL CreateScalableFontResource( DWORD dwHidden, LPCTSTR IpszFontRes, LPCTSTR IpszFontFile, LPCTSTR IpszCurrentPath )

Параметры

dwHidden

DWORD. Если права доступа к шрифту допускают только чтение и шрифт должен быть скрыт от других приложений в системе, параметр должен быть установлен равным 1. В ином случае этот параметр должен быть установлен равным 0.

IpszFontRes

LPCTSTR. Указатель на строку с нулевым символом в конце, содержащую имя файла ресурса шрифта, создаваемого этой функцией.

IpszFontFile

LPCTSTR. Указатель на строку с нулевым символом в конце, содержащую имя файла масштабируемого шрифта, на основе которого должен быть создан файл ресурса шрифта. Если этот параметр содержит полный путь, параметр IpszCurrentPath должен иметь значение NULL или указывать на строку со значением NULL. Если путь не указан, функцию AddFontResource можно использовать только при условии, что файл TTF находится в каталоге SYSTEM системы Windows.

IpszCurrentPath

LPCTSTR. Указатель на строку с нулевым символом в конце, содержащую путь к файлу масштабируемого шрифта.

Возвращаемое значение

BOOL. В случае успешного выполнения — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

wingdi.h

См. также

AddFontResource

Пример

См. пример для функции AddFontResource.

DeleteDC                                • Windows 98   • Windows 2000

Описание

Функция DeleteDC удаляет указанный контекст устройства (DC). В приложении не следует удалять контекст устройства, который был выбран с помощью функции GetDC, поэтому используйте функцию ReleaseDC.

Синтаксис

BOOL DeleteDC( HDC hDC )

Параметры

hDC

HDC. Дескриптор контекста устройства, который должен быть удален.

Возвращаемое значение

BOOL. В случае успешного выполнения — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

wingdi.h

См. также

CreateDC, CreateCompatibleDC, CreateIC, ReleaseDC

Пример

См. пример для функции CreateComoatibleDC.

DPtoLP                                    •  Windows 98   • Windows 2000

Описание

Функция DPtoLP преобразует координаты устройства в логические координаты. Преобразование зависит от режима отображения данного контекста устройства (DC), от установок начал координат и экстентов для окна и области просмотра, а также от установок универсального преобразования.

Синтаксис

BOOL DPtoLP( HDC hDC, LPPOINT IpPoints, int nCount )

Параметры

hDC

HDC. Дескриптор контекста устройства.

IpPoints

LPPOINT. Указатель на массив структур POINT. Будут преобразованы координаты д: и у, содержащиеся в каждой структуре POINT.

пCount

int. Число точек в массиве.

Возвращаемоезначение

BOOL. В случае успешного выполнения — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

wingdi.h

См. также

SetMapMode, LPtoDP

Пример

См. пример для функции SetMapMode.

EnumDisplaySettings                     • Windows 98   • Windows 2000

Описание

Функция EnumDisplaySettings позволяет получить информацию об одном из графических режимов устройства отображения. Эту функцию можно вызывать последовательно для получения информации обо всех графических режимах устройства отображения. Чтобы получить эту информацию, можно установить значение параметра iModeNum равным 0 при первом вызове и увеличивать его значение на единицу при каждом последующем вызове. Эту функцию следует вызывать, пока она не возвратит значение FALSE.При вызове функции EnumDisplaySettings с параметром iModeNum, установленным равным 0, операционная система инициализирует и кэширует информацию об устройстве отображения. При вызове функции EnumDisplaySettings с параметром iModeNum, установленным в ненулевое значение, функция возвращает информацию, которая была кэширована при последнем вызове этой функции.

Синтаксис

BOOL EnumDisplaySettings( LPCTSTR IpszDeviceName, DWORD iModeNum, LPDEVMODE IpDevMode )

Параметры

IpszDeviceName

LPCTSTR. Указатель на строку с нулевым символом в конце, обозначающую устройство отображения, о графическом режиме которого должна

быть получена информация с помощью этой функции. Этот параметр может иметь значение NULL, что указывает на текущее устройство отображения на том компьютере, где выполняется вызывающая нить. Строка должна быть задана в форме "\\.\DisplayX\ где А' может иметь значение 1, 2 или 3. В Windows 98 этот параметр должен иметь значение NULL.

iModeNum

DWORD. Значение индекса, обозначающего графический режим, о котором должна быть получена информация. Индексы графических режимов начинаются с нуля.

IpDevMode

LPDEVMODE. Указатель на структуру DEVMODE, в которую функция записывает информацию об указанном графическом режиме. Дополнительная информация о том, какие члены структуры DEVMODE при этом заполняются, приведена в описании функции ChangeDisplaySettings. Определение структуры DEVMODE дано в описании функции CreateDC ранее в этой главе.

Возвращаемое значение

BOOL. В случае успешного выполнения возвращаемое значение — TRUE; в ином случае возвращаемое значение — FALSE.

Включаемый файл

winuser.h

См. также

ChangeDisplaySettings

Пример

В следующем примере функция EnumDisplaySettings применяется для определения того, какие установки экрана поддерживаются имеющимися аппаратными средствами. В приложении каждая из этих установок вносится в окно со списком, который может просматривать пользователь. Если пользователь выбирает одну из установок и щелкает на пункте меню Test!, установки дисплея изменяются на пять секунд, а затем восстанавливаются в их первоначальные значения.

См.    \local-sources\chapl2\12-06.txt

EnumFontFamilies                       • Windows 98   • Windows 2000

Описание

Функция EnumFontFamilies перебирает шрифты в семействе шрифтов или выбирает по одному шрифту из каждого семейства шрифтов, доступного для контекста устройства. Рекомендуется использовать функцию Enum-FontFamiliesEx, а не эту функцию.

Синтаксис

int EnumFontFamilies( HDC hDC, LPCTSTR IpszFamily, FONTENUMPROC IpEnumFontFamProc, LPARAM IParam )

Параметры

hDC

HDC. Дескриптор контекста устройства.

IpszFamily

LPCTSTR. Указатель на строку с нулевым символом в конце, содержащую имя семейства желаемых шрифтов. Если этот параметр установлен равным NULL, функция EnumFontFamilies случайным образом выбирает и перечисляет по одному шрифту для каждого доступного семейства шрифтов.

IpEnumFontFamProc

IParam

FONTENUMPROC. Адрес функции обратного вызова, определяемой приложением. Формат функции обратного вызова показан ниже. LPARAM. 32-разрядное значение, определяемое приложением, которое должно быть передано функции обратного вызова наряду с информацией о шрифте.

Возвращаемое значение

int. Последнее значение, возвращенное функцией обратного вызова.

Включаемый файл

wingdi.h

См. также

EnumFontFamiliesEx

Синтаксис обратного вызова

int CALLBACK EnumFontFamProc( ENUMLOGFONT* Ipelf, NEWTEXTMETRIC* Ipntm, DWORD nFontType, LPARAM IParam )

Параметры обр

•атного вызова

Ipelf

ENUMLOGFONT*. Указатель на структуру ENUMLOGFONT, которая содержит информацию о логических атрибутах шрифта. Определение этой структуры следует за данным списком параметров.

Ipntm

NEWTEXTMETRIC*. Если шрифт является шрифтом TrueType, указатель на структуру NEWTEXTMETRIC, которая содержит информацию о физических  атрибутах  шрифта;  в ином  случае  указатель  на  структуру TEXTMETRIC. Определения этих структур следуют за списком параметров.

nFontlype

DWORD. Тип шрифта. В качестве этого параметра может применяться комбинация DEVICE_FONTTYPE, RASTER_FONTTYPE и TRUETYPE_FONTTYPE. Для определения того, какие типы шрифтов установлены в системе, применяется двоичный оператор AND (&).

IParam

LPARAM. Определяемые приложением данные, которые переданы в качестве параметра IParam функции EnumFontFamilies.

Определение ENUMLOGFONT

typedef struct tagENUMLOGFONT { LOGFONT elfLogFont; TCHAR         elfFullName [LF FULLFACESIZE] ; TCHAR         elf Style [LF_FACESIZE] ; }   ENUMLOGFONT ;

Члены

elfLogFont

LOGFONT. Дополнительная информация приведена в описании функции CreateFontlndirect.

elfFullName

TCHAR. Строка с нулевым символом в конце, содержащая полное имя шрифта.

elfStyle

TCHAR. Строка с нулевым символом в конце, содержащая начертание шрифта, например "Bold". "Italic" и т.д.

Определение TEXTMETRIC

typedef struct tagTEXTMETRIC { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmlnternalLeading ; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight;

LONG tmOverhang ; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; TCHAR tmFirstChar; TCHAR tmLastChar; TCHAR tmDefaultChar; TCHAR tmBreakChar; BYTE tmltalic; BYTE tmOnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; }   TEXTMETRIC;

Члены

tmHeight

LONG. Высота символов (подъем + спуск).

tmAscent

LONG. Подъем символов (над опорной линией, в единицах длины). "Подъемом" сокращенно называют длину верхнего выносного элемента символа.

tmDescent

LONG. Спуск символов (под опорную линию, в единицах длины). "Спуском" сокращенно называют длину нижнего выносного элемента символа.

tmlnternalLeading

LONG. Величина внутреннего интерлиньяжа в пределах, установленных членом tmHeight. Проектировщик может установить значение этого члена равным 0.

tmExternalLeading

LONG. Величина внешнего интерлиньяжа, который может быть добавлен в приложении между строками текста. Эта область не содержит мет ток и не изменяется при вызове функций вывода текста в режиме OPAQUE или TRANSPARENT. Проектировщик может установить значение этого члена равным 0.

tmAveCharWidtk

LONG. Средняя ширина символов в шрифте, без учета выступа, требуемого для полужирных или курсивных символов (обычно этот параметр определен как ширина буквы "х").

ImMaxCharWUh

LONG. Ширина самого широкого символа в шрифте.

tm Weight

LONG. Вес шрифта.

tmOverhang

LONG. Дополнительная ширина в расчете на строку, которая может быть добавлена для некоторых синтезируемых шрифтов. При синтезировании некоторых атрибутов шрифта, например полужирного или курсивного, функция GDI или устройство могут быть вынуждены задавать дополнительную ширину строки с учетом увеличения ширины отдельных символов и всей строки в целом. Член tmOverhang позволяет определить в приложении, какая часть ширины символа представляет собой фактическую ширину символа, и какая — дополнительную ширину, которая относится ко всей строке.

tmDigitizedAspectX

LONG. Коэффициент сжатия по горизонтали устройства, для которого был разработан шрифт.

tmDigitizedAspectY

LONG. Коэффициент сжатия по вертикали устройства, для которого был разработан шрифт.

tmFirstChar

TCHAR. Значение первого символа, определенного в шрифте.

tmLastChar

TCHAR. Значение последнего символа, определенного в шрифте.

tmDefaultChar

TCHAR. Значение символа, который должен применяться для замены символов, не принадлежащих к шрифту.

tmBreakChar

TCHAR. Значение символа, который будет применяться для определения границы между словами при выравнивании текста.

tmltalic

BYTE. Должен быть установлен в значение, отличное от нуля, если применяется курсивный шрифт.

tmUnderlined

BYTE. Должен быть установлен в значение, отличное от нуля, если применяется подчеркивание.

tmStruckOut

BYTE. Должен быть установлен в значение, отличное от нуля, если применяется перечеркивание.

tmPitchAndFamily

BYTE. Информация о шаге, технологии и семействе физического шрифта. Четыре младших бита этого члена указывают информацию о шаге и технологии шрифта. Значения каждого бита определены в табл. 12.7. Четыре старших бита параметра tmPitchAndFamily обозначают семейство шрифта. В приложении для получения данных о семействе шрифта можно использовать значение OxFO и двоичный оператор AND (&). Семейства шрифтов определены в табл. 12.7.

Таблица 12.7. Значения члена tmPitchAndFamily структуры TEXTMETRIC

Значение

Описание

TMPFJJEVICE

Если этот бит установлен, это — шрифт устройства.

TMPF_HXED_PTTCH

Если этот бит установлен, шрифт — разноширинный; в ином случае шрифт — одноширинный. Обратите внимание, что значения этого бита противоположны тому, что подразумевается его именем.

TMPF_TRUETYPE

Если этот бит установлен, это — шрифт TrueType.

TMPF_VECTOR

Если этот бит установлен, шрифт является векторным.

ImCharSet

BYTE. Набор символов шрифта. В системе заранее определены следующие наборы символов:ANSI CHARSET  TURKISH CHARSET DEFAULT CHARSET                                HEBREW CHARSET SYMBOL_CHARSET   ARABIC_CHARSET SHIFTJIS_CHARSET        BALTIC_CHARSET HANGEUL_CHARSET                                RUSSIAN_CHARSET GB2312 CHARSET                                  THAI CHARSET CHINESEBIG5 CHARSET                        EASTEUROPE CHARSET JOHAB CHARSET                                    OEM_CHARSET GREEK_CHARSET                                    MAC_CHARSET

Определение NEWTEXTMETRICtypedef struct tagNEWTEXTMETRIC { //   To же,   что   и   структура   TEXTMETRIC.DWORD ntmFlags; OINT    ntmSizeEM;

UINT    ntmCellHeight; UINT    ntmAvgWidth; }   NEWTEXTMETRIC;

Члены ntm Flags

DWORD. Битовая маска, которая указывает, является ли шрифт курсивным, подчеркнутым, выделенным, полужирным и т.д. Значения каждогр бита перечислены в табл. 12.8.

Таблица 12.8. Значения битов ntmRags структуры NEWTCXTMETRIC

Бит     Имя

Описание

0          NTMJTALIC

Курсив.

5          NTM_BOLD

Полужирный.

8           NTM REGULAR

Обычный.

16        NTM_NONNEGATIVE_AC

Ни один глиф (специальный наборный знак, хранящийся в памяти в цифровом виде) в шрифте при любом размере не имеет отрицательной шпации А или С.

17         NTM_PS_OPENTYPE

Шрифт OpenType PostScript.

1 8         NTM_TT_OPENTYPE

Шрифт OpenType TrueType.

1 9         NTM_MULTIPLEMASTER

Шрифт с несколькими базовыми шрифтами.

20         NTM_TYPE1

Шрифт Туре 1 .

21         NTM_DSIG

Шрифт с цифровой подписью. Это позволяет контролировать качество шрифта и гарантировать, что шрифт проверен и не поврежден.                                                                                                 |

ntmSizeEM

UINT. Размер круглой шпации шрифта в условных единицах измерения (в которых был разработан шрифт).

ntmCellHeight

UINT. Высота шрифта в условных единицах измерения, для сравнения со значением члена ntmSizeEM.

ntmAvgWidth

UINT. Средняя ширина символов шрифта в условных единицах измерения, для сравнения со значением члена ntmSizeEM.                   

Пример

В следующем примере (рис. 12.2) функция EnumFontFamilies применя-

EnumFontFamiliesEx                      • Windows 98   • Windows 2000

Описание

Функция EnumFontFamiliesEx перечисляет в системе все шрифты, соответствующие характеристикам шрифта, которые указаны в заданной структуре LOGFONT. Эта функция перебирает шрифты с учетом гарнитуры, набора символов или того и другого. Для приложений на основе Win32 рекомендуется эта функция, а не EnumFontFamilies.

Синтаксис

int EnumFontFamiliesEx( HDC hDC, LPLOGFONT IpLogFont, FONTENUMPROC IpEnumFontFamExProc, LPARAM IParam, DWORD dwFlags )

Параметры

hDC

HDC. Контекст устройства, для которого должны быть перечислены доступные шрифты.

IpLogFont

LPLOGFONT. Указатель на структуру LOGFONT, содержащую информацию о шрифтах, которые должны быть перечислены. Для согласования шрифтов применяются члены, перечисленные в табл. 12.9. Определение структуры LOGFONT приведено в описании функции CreateFontlndirect ранее в этой главе.

Таблица 12.9. Члены структуры LOGFONT, предназначенные для использования в функции EnumFontFamiliesEx

Член

Описание

HCharSet

Если этот член установлен равным DEFAULT_CHARSET, функция перечисляет все шрифты во всех наборах символов. Если этот член установлен равным допустимому значению набора символов, функция перечисляет только шрифты в указанном наборе символов.

HFaceName

Если этот член установлен равным пустой строке, функция перечисляет один шрифт в каждой доступной гарнитуре. Если этот член установлен равным допустимому имени гарнитуры, функция перечисляет все шрифты с указанным именем.

HPitchAndFamHy

Должен быть установлен равным 0 для всех версий языка операционной системы, кроме еврейского и арабского. Для данных языков значение этого члена должно быть установлено равным MONO_FONT, чтобы были перечислены только те шрифты, в которых представлены все символы кодовой страницы.

IpEnumFontFamExProc

FONTENUMPROC. Указатель на функцию обратного вызова, определяемую приложением. Определение функции обратного вызова приведено ниже.

IParam

LPARAM. Указывает 32-разрядное значение, определяемое приложением, которое передается функции обратного вызова в процессе перечисления шрифтов.

dwFlags

DWORD. Зарезервированное значение; должно быть равно 0.

Возвращаемое значение

int. В случае успешного выполнения функции, возвращается последнее значение, возвращенное функцией обратного вызова.

Включаемый файл

wingdi.h

См. также

EnumFontFamilies