Windows GDI. Выводим текст
Table of contents
Функции вывода текста в оконное приложение
Получив дескриптор контекста устройства, его можно использовать, например, для вывода текста. Для этого, помимо функции TextOut, также существуют несколько других функций, с более расширенным функционалом.Функция ExtTextOut выводит текст используя текущий выбранный шрифт, цвета фона и текста:
Прототип функции ExtTextOut
BOOL ExtTextOut(HDC hdc, int X. int Y, UINT fuOptions, CONST RECT *lprc, LPCSTR lpString, UINT cbLen, CONST INT *lpDx);
Параметры функции ExtTextOut:
ПАРАМЕТР | ОПИСАНИЕ |
---|---|
HDC hdc | Дескриптор контекста устройства, в которое будет осуществляться вывод. |
int X | Координата точки по оси x (отсчитывается от левого верхнего угла), где будет размещена надпись. |
int Y | Координата точки по оси y (отсчитывается от левого верхнего угла), где будет размещена надпись. |
UINT fuOptions | Параметры вывода текста. Возможные значения приведены в Таблице 1. |
CONST RECT *lprc | Произвольные размеры. |
LPCSTR lpString | Указатель на строку с текстом. Строка обязательно заканчивается комбинацией символов \0. |
int cbLen | Число символов в строке с текстом. |
CONST INT *lpDx | Указатель на массив значений пробелов. Он указывает на массив, в котором хранятся хранятся значения межсимвольных интервалов для выводимого текста. При указании значения NULL используются значения интервалов по умолчанию. |
В случае успеха функция возвращает ненулевое значение. Программист может произвольно предоставить размеры, которые используются для отсечения, окраски, или обоих параметров.
Таблица 1. Возможные значения параметра fuOptions функции ExtTextOut
ЗНАЧЕНИЕ | ОПИСАНИЕ |
---|---|
ETO_CLIPPED | В случае отсечения. Текст будет обрезаться по прямоугольнику. |
TO_OPAQUE | Для заполнения прямоугольника должен использоваться текущий цвет фона. |
ETO_GLYPH_INDEX | Windows 95 и Windows NT 4.0 и более старшие: Массив lpString относится к массиву, возвращаемому функцией GetCharacterPlacement, и должен анализироваться непосредственно графическим интерфейсом устройств (GDI), поскольку никакая более поздняя ориентированная на конкретный язык обработка не требуется. Глиф индексируется только тогда, когда применяются шрифты TrueType, но флажок может использоваться для растровых и векторных шрифтов, чтобы указать, что в более поздней обработке языка нет необходимости, а графический интерфейс устройств должен обработать строку непосредственно. Заметьте, что все индексы глифа - 16-разрядные значения даже при том, что строка предназначена для растровых шрифтов быть массивом значений из 8 битов . |
ETO_IGNORELANGUAGE | Windows NT 4.0 и позже: Зарезервирован для системного использования. Если приложение устанавливает этот флажок, оно теряет поддержку национальных языков, и, в некоторых случаях, оно не может показать на экране никакого текста вообще. |
ETO_NUMERICSLATIN | Windows 95 and Windows NT 4.0 and later: Чтобы показывать числа с использованием европейских цифр. |
ETO_NUMERICSLOCAL | Windows 95 and Windows NT 4.0 and later: Чтобы показывать числа с использованием цифр, применяемых в данной местности. |
ETO_PDY | Windows 2000/XP: Когда он устанавливается, массив, на который указывает параметр lpDx содержит пары значений. Первое значение каждой пары, как обычно, расстояние между началами координат смежных символьных ячеек, а второе значение - смещение по вертикальному направлению шрифта. |
ETO_RTLREADING | Windows 95 и Windows NT 4.0 и позже для ближневосточного выпуска Windows: Если это значение установлено, в контексте устройства выбираются и еврейский, и арабский шрифт, строка выводится, используя порядок зеркального изображения. Если это значение не определено, строка выводится в порядке слева направо . Тот же самый результат может быть достигнут установкой значения TA_RTLREADING в параметре функции SetTextAlign. Это значение сохраняется для совместимости вниз. |
Функция DrawText выводит отформатированный текст в заданном прямоугольнике:
Прототип функции DrawText
int DrawText(HDC hdc, LPCSTR lpString, int nCount, LPRECT lpRect, UINT uFormat);
Функция форматирует текст согласно заданному методу (дополнительная табуляция, выравнивание символов, переносы строк, и т. д).
Параметры функции DrawText:
ПАРАМЕТР | ОПИСАНИЕ |
---|---|
HDC hdc | Дескриптор контекста устройства, в которое будет осуществляться вывод. |
LPCSTR lpString | Указатель на строку с текстом. |
int nCount | Устанавливает длину строки. Для функции ANSI - это число байтов (BYTE), а для функции Unicode, это является количеством слов (WORD). Если параметр nCount равен - (минус)1, строка в LPCSTR lpString должна быть с нулевым символом в конце. |
LPRECT lpRect | Адрес структуры RECT, описывающей прямоугольник, внутри которого и будет располагаться текст. |
UINT uFormat | Указывает на способ форматирования текста внутри прямоугольника. Может принимать одно или несколько значений, указанных в Таблице 2. |
Таблица 2. Возможные значения параметра uFormat функции DrawText
ЗНАЧЕНИЕ | ОПИСАНИЕ |
---|---|
DT_LEFT | Выравнивает текст по левому краю. |
DT_RIGHT | Выравнивает текст по правому краю. |
DT_CENTER | Выравнивает текст по центру по горизонтали. |
DT_VCENTER | Выравнивает текст по центру по вертикали. Это значение используется только со значением DT_SINGLELINE. |
DT_TOP | Выравнивает текст по верхней границе прямоугольника. |
DT_BOTTOM | Выравнивает текст по нижней границе прямоугольника. Это значение используется только со значением DT_SINGLELINE. |
DT_CALCRECT | Выясняет ширину и высоту прямоугольника. Если имеется несколько строк текста, функция DrawText использует ширину прямоугольника, указанную параметром lpRect и продлевает основу прямоугольника, чтобы ограничить последнюю строку текста. Если самое большое слово шире, чем прямоугольник, ширина дополняется. Если текст -меньше, чем ширина прямоугольника, ширина уменьшается. Если есть только одна строка текста, DrawText изменяет правую сторону прямоугольника так, чтобы она ограничивала последнюю букву в строке. И в том, и в другом случае, DrawText возвращает значение высоты отформатированного текста, но не выводит текст. |
DT_EDITCONTROL | Дублирует характеристики отображения текста в многострочном поле редактирования текста. А именно, средняя ширина символа рассчитывается в той же самой манере, как и для поля редактирования текста, и функция не показывает на экране частично видимую последнюю строку. |
DT_END_ELLIPSIS | Отображаемый на экране текст, если конец строки не вмещается в прямоугольнике, обрезается, а тире добавляются. Если слово, которое не в конце строки, идет за пределы прямоугольника, оно обрезается без тире. Строка не модифицируется, если флажок DT_MODIFYSTRING не установлен. Сравнивается с DT_PATH_ELLIPSIS и DT_WORD_ELLIPSIS. |
DT_EXPANDTABS | Увеличивает число символов в табуляции. Заданное по умолчанию число символов в табуляции - восемь. Флаги (значения) DT_WORD_ELLIPSIS, DT_PATH_ELLIPSIS и DT_END_ELLIPSIS не могут быть использованы со значением DT_EXPANDTABS. |
DT_EXTERNALLEADING | Включает в себя межстрочное расстояние шрифта в высоте строки. Обычно, межстрочное расстояние не включается в высоту строки текста. |
DT_HIDEPREFIX | Windows 2000/XP: Игнорирует амперсанд (&) префиксную букву в тексте. Буква, которая следует, не будет подчеркнута (как это, например, делается при указании клавиатурных ярлыков в Главном меню программы), но другие мнемонически-префиксные буквы все еще обрабатываются. Сравнивается с DT_NOPREFIX и DT_PREFIXONLY. |
DT_INTERNAL | Использует системный шрифт для расчёта метрик текста. |
DT_MODIFYSTRING | Изменяет заданную строку, чтобы согласовать отображаемый на экране текст. Это значение не имеет никакого действия, если не установлен флажок DT_END_ELLIPSIS или DT_PATH_ELLIPSIS. |
DT_NOCLIP | Рисует без отсечения по границам. Функция DrawText при этом работает немного быстрее. |
DT_NOFULLWIDTHCHARBREAK | Windows 98/Me, Windows 2000/XP: Не допускает перенос строки в DBCS (символьная строка двойной ширины), так, чтобы правило переноса строки было эквивалентно SBCS строкам. Например, это свойство может быть использовано в окнах с корейским языком, для большей удобочитаемости иероглифов. Это значение не имеет никакого действия, если флажок DT_WORDBREAK не установлен. |
DT_NOPREFIX | Выключает обработку префиксных букв. Обычно, функция DrawText воспринимает мнемонически-префиксную букву & как директиву, чтобы подчеркнуть букву, которая следует после, а мнемонически-префиксные символы && как директиву, чтобы печатать (отобразить на экране) единственную &. Устанавливая флажок DT_NOPREFIX, эта обработка отключается. Сравнивается с флажком DT_HIDEPREFIX и DT_PREFIXONLY. |
DT_PATH_ELLIPSIS | Для отображаемого на экране текста, заменяет символы в середине строки на тире так, чтобы результат вместился в заданном прямоугольнике. Если строка содержит знак наклонной черты влево (\), флажок DT_PATH_ELLIPSIS сохраняет в максимально возможной степени текста после последней наклонной черты влево. Строка не модифицируется, если флажок DT_MODIFYSTRING не установлен. Сравнивается с флагами DT_END_ELLIPSIS и DT_WORD_ELLIPSIS. |
DT_PREFIXONLY | Windows 2000/XP: Рисует только подчеркивание в позиции буквы, следующей за префиксным символом амперсанта (&) . При этом не выводит никакие другие символы в строке (в случае со словом, где стоит символ &, выводится только нижнее подчёркивание). |
DT_RTLREADING | Компонует порядок чтения справа налево для двунаправленного текста, когда шрифт, выбранный в hdc - шрифт еврейского или арабского языка. Заданный по умолчанию порядок чтения для всех текстов - слева направо. |
DT_SINGLELINE | Показывает на экране весь текст на одной строке. Возвраты каретки и переводы строки не разрывают строку. |
DT_TABSTOP | Устанавливает шаги табуляции. Биты 15-8 (старший байт младшего слова) параметра uFormat задают число символов для каждой табуляции. Заданное по умолчанию число символов на табуляцию - восемь. Флажки DT_CALCRECT, DT_EXTERNALLEADING, DT_INTERNAL, DT_NOCLIP и значения DT_NOPREFIX не могут быть использованы со значением DT_TABSTOP. |
DT_WORDBREAK | Делит слова. Строки автоматически делятся по словам, если слово выходит за края прямоугольника, заданного параметром lpRect . Возврат каретки - последовательность перевода строки также делит строку. Если он не установлен, вывод однострочный. |
DT_WORD_ELLIPSIS | Обрезает любое слово, которое не вмещается в прямоугольнике и добавляет эллипсисы. Сравнивается с флагами DT_END_ELLIPSIS и DT_PATH_ELLIPSIS. |
Если функция завершается успешно, возвращаемое значение - высота текста в логических единицах измерения. Если установлены флажки DT_VCENTER или DT_BOTTOM, возвращаемое значение - смещение в lpRect->top; с верха до основания выводимого текста. В случае неудачного выполнения возвращается 0 (ноль).
Функция DrawTextEx также выводит отформатированный текст в заданном прямоугольнике:
Прототип функции DrawTextEx
int DrawTextEx(HDC hdc, LPCSTR lpString, int nCount, LPRECT lpRect, UINT uFormat, LPDRAWTEXTPARAMS lpDTParams);
Функция DrawTextEx имеет те же самые параметры, что и DrawText, плюс добавлен параметр LPDRAWTEXTPARAMS lpDTParams, указывающий на предварительно заполненную структуру DRAWTEXTPARAMS, в которой указываются дополнительные параметры форматирования.
Функция DrawTextEx поддерживает только шрифты, где угол, под которым печатается шрифт и ориентация равны нулю (не используются).
Если функция завершается успешно, возвращаемое значение - высота текста в логических единицах измерения. Если установлены флажки DT_VCENTER или DT_BOTTOM, возвращаемое значение - смещение в lpRect->top; с верха до основания выводимого текста. В случае неудачного выполнения возвращается 0 (ноль).
Функция TabbedTextOut также выводит отформатированный текст. При этом она использует позиции табуляции, получаемые в качестве параметра:
Прототип функции TabbedTextOut
LONG TabbedTextOut(HDC hdc, int X, int Y, LPCSTR lpString, int nCount, int nTabPositions, CONST LPINT lpnTabStopPositions, int nTabOrigin);
Параметры функции TabbedTextOut:
ПАРАМЕТР | ОПИСАНИЕ |
---|---|
HDC hdc | Дескриптор контекста устройства, в которое будет осуществляться вывод. |
int X | Координата точки по оси x (отсчитывается от левого верхнего угла), где будет размещена надпись. |
int Y | Координата точки по оси y (отсчитывается от левого верхнего угла), где будет размещена надпись. |
LPCSTR lpString | Указатель на строку с текстом. Строка не должна заканчиваться нулем, поскольку параметр nCount задает длину строки. |
int nCount | Число символов в строке (длина строки). Устанавливает длину строки, на которую указывает параметр lpString. Для функции ANSI это - итоговое число байтов (BYTE), а для функции Unicode это - итоговое число слов (WORD). Обратите внимание на то, что для функции ANSI, буквы в кодовых страницах SBCS (набора однобайтовых символов) берут по одному байту каждый, в то время как большинство букв в кодовых страницах DBCS (набора двухбайтовых символов) берут два байта; для функции Unicode наиболее правильное определение символов Unicode (это в Основной Многоязычной плоскости - Basic Multilingual Plane(BMP)) - одно слово (WORD), в то время как в заменителях Unicode - это два слова (WORD). В Windows 95/98/Me это значение не может быть больше чем 8192. |
int nTabPositions | Число шагов табуляции в массиве. |
CONST LPINT lpnTabStopPositions | Указатель на массив, содержащий позиции табуляции, в логических единицах измерения. Шаги табуляции должны сортироваться в нарастающем порядке; наименьшее x-значение должно быть первым элементом в массиве. В Windows 95/98/Me шаг табуляции может задаваться как отрицательное значение, которое заставляет текст быть выровненным при табуляции по правому краю на шаге табуляции, а не выровненным по левому краю. |
nTabOrigin | Устанавливает x-координату исходной позиции, от которой увеличиваются позиции табуляции, в логических единицах измерения. |
В случае успешного завершения возвращаемое значение - размеры, в логических единицах измерения, строки. Высота находится в старшем слове, а ширина находится в младшем слове. При неудачно завершении взначение - нуль. Если параметр nTabPositions равен нулю, а параметр lpnTabStopPositions - ПУСТО (NULL), позиции табуляции увеличиваются до восьмикратной средней ширины символа.
Если nTabPositions - 1, шаги табуляции разделяются расстоянием, заданным первым значением в массиве lpnTabStopPositions. Если массив lpnTabStopPositions содержит больше чем одно значение, шаг табуляции устанавливается для каждого значения в массиве, до числа, заданного параметром nTabPositions.
Параметр nTabOrigin дает возможность приложению вызвать функцию TabbedTextOut несколько раз для одиночной строки. Если приложение вызывает TabbedTextOut более чем один раз с параметром nTabOrigin, установленным в то же самое значение, функция каждый раз, дополняет все позиции табуляции относительно позиции, заданной nTabOrigin. По умолчанию, текущая позиция не используется или обновляется функцией TabbedTextOut. Если приложение должно модифицировать текущую позицию, когда оно вызывает TabbedTextOut, прикладная программа может вызвать функцию SetTextAlign с параметром wFlags установленным в TA_UPDATECP. Когда этот флажок устанавливается, система игнорирует параметры X и Y при последующих запросах функции TabbedTextOut, используя текущую позицию вместо этого.
Настройка выводимого текста (шрифт, цвет текста, цвет фона)
Все функции вывода текста руководствуются текущими, выбранными для контекста устройства установками шрифта, цвета фона и цвета текста. Эти свойства можно изменять с помощью специальных функций.Функция SetTextColor меняет цвет текста:
Прототип функции SetTextColor
COLORREF SetTextColor(HDC hdc, COLORREF crColor);
Первый параметр - дескриптор контекста устройства. Второй параметр - выбранный цвет.
Тип COLORREF является 32-битным значением, определяющим цвет в формате RGB (англ. red, green, blue - красный, зелёный, синий).
Функция SetTextColor возвращает предыдущее значение цвета.
Для удобства работы с цветами существует макрос RGB (red, green, blue), составляющий из трёх байт (по байту на каждый компонент цвета) 32-битное значение, соответствующее выбранному цвету. В файле wingdi.h этот макрос определён так:
Фрагмент wingdi.h
... #define RGB(r, g, b) ((DWORD) (((BYTE) (r) | ((WORD) (g) << 8)) | (((DWORD) (BYTE) (b)) << 16))) ...
Например, строка...
SetTextColor(hdc, RGB(255, 0, 0));
...устанавливает красный цвет текста для контекста устройства hdc.
Функция SetBkColor меняет цвет фона текста:
Прототип функции SetBkColor
COLORREF SetBkColor(HDC hdc, COLORREF crColor);
Здесь параметры такие же, как в функции SetTextColor.
Функция действует только в том случае, когда для заднего плана контекста устройства с помощью функции SetBkMode установлен режим непрозрачности при смешивании (OPAQUE).
Функция SetBkMode изменяет режим смешивания:
Прототип функции SetBkMode
int SetBkMode(HDC hdc, int iBkMode);
Первый параметр - дескриптор контекста устройства. Второй параметр может принимать значения:
ЗНАЧЕНИЕ | ОПИСАНИЕ |
---|---|
OPAQUE | Поверхность участка, на котором печатается текст, будет залита цветом, установленным функцией SetBkColor. |
TRANSPARENT | Поверхность участка, на котором печатается текст, останется без изменений. Текущий цвет фона игнорируется. |
Определение характеристик шрифта
Часто в программах с GDI необходимо узнать определённые характеристики шрифтов. Часто это связано с тем, что шрифты TrueType очень часто (а на практике почти всегда) являются пропорциональными g, то есть имеющими разную ширину у разных букв. Например, буква "W" значительно шире буквы "I". Это несколько усложняет работу со шрифтами, так как невозможно сразу сказать, сколько букв разместится в одной строке экрана. Возможно, что это будут широкие буквы, а возможно, что и нет. К счастью, и здесь на помощь приходят функции GDI.Функция GetTextExtentPoint32:
Прототип функции GetTextExtentPoint32
BOOL GetTextExtentPoint32(HDC hdc, LPCSTR lpString, int cbString, LPSIZE lpSize);
Параметры функции GetTextExtentPoint32:
ПАРАМЕТР | ОПИСАНИЕ |
---|---|
HDC hdc | Дескриптор контекста устройства, в которое будет осуществляться вывод. |
LPCSTR lpString | Текстовая строка. |
int cbString | Размер текстовой строки. |
LPSIZE lpSize | Адрес структуры типа SIZE, в которую будут помещены размеры области, достаточной для размещения текстовой строки (содержащейся в lpString). При вычислении размера учитывается шрифт, выбранный в данный момент в контекст устройства. |
Пример применения функции GetTextExtentPoint32:
UINT nScreenX, nScreenY; HDC hdc; char* szString="Teкстовая строка"; SIZE sText; nScreenX=GetSystemMetrics(SM_CXSCREEN); nScreenY=GetSystemMetrics(SM_CYSCREEN); hdc=GetDC(hwnd); GetTextExtentPoint32(hdc, szString, strlen(szString), &sText); TextOut(hdc, (nScreenX-sText.cx)/2, (nScreenY-sText.cy)/2, szString, strlen(szString)); ReleaseDC(hwnd, hdc);
В случае полноэкранного приложения, данный фрагмент кода выведет надпись "Текстовое сообщение", центрируя его по горизонтали и вертикали в зависимости от текущего разрешения экрана.
Функция GetTextMetrics выводит информацию об используемом шрифте:
Прототип функции GetTextMetrics
BOOL GetTextMetrics(HDC hdc, LPTEXTMETRIC lptm);
Первый параметр - дескриптор контекста устройства. Второй параметр - адрес структуры TEXTMETRIC, имеющей следующий вид:
Структура TEXTMETRIC
typedef struct tagTEXTMETRIC { LONG tmHeight; LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; // Величина пустого места для знаков над символами LONG tmExternalLeading; // Величина пустого пространства между строками LONG tmAveCharWidth; // Средняя ширина символа LONG tmMaxCharWidth; // Ширина самого широкого символа LONG tmWeight; // Насыщенность ("жирность") шрифта LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; BCHAR tmFirstChar; // Значение первого символа, определённого в шрифте BCHAR tmLastChar; // Значение последнего символа, определённого в шрифте BCHAR tmDefaultChar; BCHAR tmBreakChar; BYTE tmItalic; // Если не ноль, то наклонный BYTE tmUnderlined; // Если не ноль, то подчёркнутый BYTE tmStruckOut; // Если не ноль, то зачёркнутый BYTE tmPitchAndFamily; // Указывает на технологию и семейство шрифта BYTE tmCharSet; // Указывает на множество символов } TEXTMETRIC
Вот описание элементов структуры TEXTMETRIC:
ЭЛЕМЕНТ | ОПИСАНИЕ |
---|---|
LONG tmHeight | Устанавливает высоту (высота символа вместе с надстрочником + пространство ниже базовой линии знака) символов. |
LONG tmAscent | Устанавливает высоту символа вместе с надстрочником (для элемента выше базовой линии) символов. |
LONG tmDescent | Устанавливает пространство ниже базовой линии знака (для элемента ниже базовой линии) символов. |
LONG tmInternalLeading | Устанавливает величину междустрочного пространства (пробела) внутри границ, установленных членом tmHeight. В этой области могут встретиться знак ударения и другие диакритические символы. Программист может установить этот член в ноль. |
LONG tmExternalLeading | Устанавливает количество дополнительного междустрочного пространства (пробела), которое приложение добавляет между рядами. Так как эта область - вне шрифта, член не содержит никакой маркировки и не изменяется запросами вывода текста ни в одном режиме OPAQUE или TRANSPARENT. Программист может установить этот член в ноль. |
LONG tmAveCharWidth | Устанавливает среднюю ширину символов в шрифте (обычно определяемую как ширина буквы x). Это значение не включает в себя выступ, обязательный для полужирных или курсивных символов. |
LONG tmMaxCharWidth | Устанавливает ширину самого широкого символа в шрифте. |
LONG tmWeight | Устанавливает толщину шрифта. |
LONG tmOverhang | Устанавливает дополнительную ширину на одну строку, которая может добавиться к некоторым синтезируемым шрифтам. При синтезировании некоторых атрибутов, таких как полужирный или курсивный, графический интерфейс устройства (GDI) или устройство должно прибавить ширину к строке и на полный символ и на полную строку базиса. Например, GDI делает строку полужирной, расширяя интервал каждого символа и добавляя лишний знак при помощи значения смещения; он выделяет курсивом шрифт, при помощи операции сдвига половины строки. В любом случае, это выступ за основную строку. Для полужирных строк, выступ - это расстояние, на которое смещено повторение символа. Для курсивных строк, выступ - величина, на которую сдвигается вершина шрифта за основу шрифта. Член tmOverhang дает возможность приложению определить, какая символьная ширина, возвращенная при вызове функции GetTextExtentPoint32 для одиночного символа, является фактической шириной символа и сколько имеется дополнительной ширины на строку . Фактическая ширина - это протяженность минус выступ. |
LONG tmDigitizedAspectX | Устанавливает горизонтальную координату устройства, для которого шрифт был разработан. |
LONG tmDigitizedAspectY | Устанавливает вертикальную координату устройства, для которого шрифт был разработан. Отношение членов tmDigitizedAspectX и tmDigitizedAspectY равно отношению ширины знака к его высоте устройства, для которого шрифт был разработан. |
BCHAR tmFirstChar | Устанавливает значение первого символа, определенного в шрифте. |
BCHAR tmLastChar | Устанавливает значение последнего символа, определенного в шрифте. |
BCHAR tmDefaultChar | Устанавливает значение символа, который будет заменен символами, которых нет в шрифте. |
BCHAR tmBreakChar | Устанавливает значение символа, который будет использован, чтобы определять границы слова для выравнивания текста. |
BYTE tmItalic | Устанавливает курсивный шрифт, если этот член не ноль. |
BYTE tmUnderlined | Устанавливает подчёркнутый шрифт, если этот член не ноль. |
BYTE tmStruckOut | Устанавливает зачёркнутый шрифт, если этот член не ноль. |
BYTE tmPitchAndFamily | Устанавливает информацию о ширине знакоместа, технологии и семействе физического шрифта. Четыре младших бита этого члена устанавливают информацию о ширине знакоместа и технологии шрифта. Значения каждого из младших битов этого параметра взаимоисключают друг друга. То есть, во всём байте в данный момент времени может быть определена только одна из четырёх именованных констант, соответствующая одному из четырёх младших битов, представленных в Таблице 3 (остальные биты при этом должны иметь значение ноль!). |
BYTE tmCharSet | Устанавливает набор символов шрифта. Список возможных значений: ANSI_CHARSET, BALTIC_CHARSET, CHINESEBIG5_CHARSET, DEFAULT_CHARSET, EASTEUROPE_CHARSET, GB2312_CHARSET, GREEK_CHARSET, HANGUL_CHARSET, MAC_CHARSET, OEM_CHARSET, RUSSIAN_CHARSET, SHIFTJIS_CHARSET, SYMBOL_CHARSET, TURKISH_CHARSET, VIETNAMESE_CHARSET, JOHAB_CHARSET (для выпуска Windows на корейском языке), ARABIC_CHARSET, HEBREW_CHARSET (для выпуска Windows на языках Ближнего Востока), THAI_CHARSET (для выпуска Windows на тайском языке). |
Таблица 3. Именованные константы, расположенные в младших битах члена tmPitchAndFamily структуры TEXTMETRIC
КОНСТАНТА | ОПИСАНИЕ |
---|---|
TMPF_FIXED_PITCH | Если этот бит установлен, шрифт с переменной шириной знакомест символов. Если этот бит сброшен, шрифт - фиксированный шрифт ширины знакомест символов. |
TMPF_VECTOR | Если этот бит установлен, шрифт - векторный. |
TMPF_TRUETYPE | Если этот бит установлен, шрифт - TrueType. |
TMPF_DEVICE | Если этот бит установлен, шрифт - поставляемый с устройством (встроенный). |
В случае успешного завершения работы, функция возвращает ненулевое значение. Иначе - 0 (ноль).
Last wiki comments