Функция ExtTextOutA (wingdi.h)

Функция ExtTextOut рисует текст с использованием выбранного шрифта, цвета фона и цвета текста. При необходимости можно указать измерения, которые будут использоваться для обрезки, непрозрачности или и того, и другого.

Синтаксис

BOOL ExtTextOutA(
  [in] HDC        hdc,
  [in] int        x,
  [in] int        y,
  [in] UINT       options,
  [in] const RECT *lprect,
  [in] LPCSTR     lpString,
  [in] UINT       c,
  [in] const INT  *lpDx
);

Параметры

[in] hdc

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

[in] x

Координата X (в логических координатах) точки отсчета, используемой для размещения строки.

[in] y

Координата Y в логических координатах точки отсчета, используемой для позиционирования строки.

[in] options

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

Значение Значение
ETO_CLIPPED
Текст будет обрезан прямоугольником.
ETO_GLYPH_INDEX
Массив lpString относится к массиву, возвращенному из GetCharacterPlacement , и его необходимо анализировать непосредственно с помощью GDI, так как дальнейшая обработка для конкретного языка не требуется. Индексирование глифов применяется только к шрифтам TrueType, но флаг можно использовать для точечных и векторных шрифтов, чтобы указать, что дальнейшая языковая обработка не требуется, и GDI должен обрабатывать строку напрямую. Обратите внимание, что все индексы глифов являются 16-разрядными значениями, несмотря на то, что строка считается массивом 8-разрядных значений для растровых шрифтов.

Для ExtTextOutW индексы глифов сохраняются в метафайл. Однако для отображения правильных символов метафайл должен воспроизводиться с использованием одного и того же шрифта. Для ExtTextOutA индексы глифов не сохраняются.

ETO_IGNORELANGUAGE
Зарезервировано для системного использования. Если приложение устанавливает этот флаг, оно теряет поддержку международных сценариев и в некоторых случаях может вообще не отображать текст.
ETO_NUMERICSLATIN
Для отображения чисел используйте европейские цифры.
ETO_NUMERICSLOCAL
Для отображения чисел используйте цифры, соответствующие языковому стандарту.
ETO_OPAQUE
Для заливки прямоугольника следует использовать текущий цвет фона.
ETO_PDY
Если этот параметр задан, массив, на который указывает lpDx , содержит пары значений. Первое значение каждой пары— это, как обычно, расстояние между источниками смежных символьных ячеек, а второе значение — это смещение по вертикали шрифта.
ETO_RTLREADING
Выпуск Windows для ближневосточных языков: Если это значение указано и в контексте устройства выбран иврит или арабский шрифт, строка выводится в порядке чтения справа налево. Если это значение не указано, строка выводится в порядке слева направо. Такого же эффекта можно достичь, задав значение TA_RTLREADING в SetTextAlign. Это значение сохраняется для обеспечения обратной совместимости.
 

Значения ETO_GLYPH_INDEX и ETO_RTLREADING нельзя использовать вместе. Так как ETO_GLYPH_INDEX подразумевает, что вся обработка языка завершена, функция игнорирует флаг ETO_RTLREADING, если он также указан.

[in] lprect

Указатель на необязательную структуру RECT , указывающую размеры (в логических координатах) прямоугольника, используемого для обрезки, непрозрачности или и того, и другого.

[in] lpString

Указатель на строку, указывающую текст для рисования. Строка не должна завершаться с нуля, так как cbCount указывает длину строки.

[in] c

Длина строки, на которую указывает lpString.

Это значение не может превышать 8192.

[in] lpDx

Указатель на необязательный массив значений, указывающий расстояние между источниками смежных символьных ячеек. Например, логические единицы lpDx[i] отделяют истоки символьной ячейки i и ячейки символа i + 1.

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

Если строка нарисована, возвращается ненулевое значение. Однако если версия ANSI ExtTextOut вызывается с ETO_GLYPH_INDEX, функция возвращает значение TRUE , даже если функция ничего не делает.

Если функция выполняется неудачно, возвращается нулевое значение.

Комментарии

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

Термин Описание
TA_BASELINE Опорная точка будет находиться в базовой строке текста.
TA_BOTTOM Точка отсчета будет находиться на нижнем краю ограничивающего прямоугольника.
TA_TOP Точка отсчета будет находиться на верхнем крае ограничивающего прямоугольника.
TA_CENTER Точка отсчета будет выровнена по горизонтали по центру ограничивающего прямоугольника.
TA_LEFT Точка отсчета будет находиться на левом краю ограничивающего прямоугольника.
TA_RIGHT Точка отсчета будет находиться по правому краю ограничивающего прямоугольника.
TA_NOUPDATECP Текущая позиция не обновляется после каждого вызова вывода текста. Точка отсчета передается в функцию вывода текста.
TA_RTLREADING Выпуск Windows для ближневосточных языков: Текст расположен в порядке чтения справа налево, в отличие от порядка чтения слева направо по умолчанию. Это применимо, только если в контексте устройства выбран шрифт иврит или арабский.
TA_UPDATECP Текущая позиция обновляется после каждого вызова вывода текста. Текущая позиция используется в качестве точки отсчета.
 

Если параметр lpDx имеет значение NULL, функция ExtTextOut использует интервал между символами по умолчанию. Источники символьных ячеек и содержимое массива, на который указывает параметр lpDx , указываются в логических единицах. Источник символьной ячейки определяется как левый верхний угол символьной ячейки.

По умолчанию текущая позиция не используется и не обновляется этой функцией. Однако приложение может вызывать функцию SetTextAlign с параметром fMode, заданным TA_UPDATECP, чтобы позволить системе использовать и обновлять текущую позицию каждый раз, когда приложение вызывает ExtTextOut для указанного контекста устройства. Если этот флаг установлен, система игнорирует параметры X и Y при последующих вызовах ExtTextOut .

Для версии ANSI ExtTextOut массив lpDx имеет то же количество значений INT, что и байты в lpString. Для символов DBCS можно выравливать dx в записях lpDx между начальным байтом и конечным байтом, если сумма двух байтов суммирует до нужного dx. Для символов DBCS с версией ExtTextOut в Юникоде каждый глиф Юникода получает одну запись pdx .

Обратите внимание, что значения alpDx из GetTextExtentExPoint не совпадают со значениями lpDx для ExtTextOut. Чтобы использовать значения alpDx в lpDx, необходимо сначала обработать их.

ExtTextOut будет использовать Uniscribe при необходимости, что приведет к откату шрифта. Флаг ETO_IGNORELANGUAGE будет препятствовать этому поведению и не должен передаваться.

Кроме того, ExtTextOut выполняет внутреннюю пакетную обработку вызовов перед переходом в режим ядра, что позволяет снизить некоторые проблемы с производительностью при взвешивании использования PolyTextOut и ExtTextOut.

Совет

ExtTextOut настоятельно рекомендуется использовать вместо PolyTextOut для современной разработки из-за его способности обрабатывать отображение на разных языках.

Примеры

Пример см. в разделе Настройка шрифтов для Menu-Item текстовых строк статьи Использование меню.

Примечание

Заголовок wingdi.h определяет ExtTextOut как псевдоним, который автоматически выбирает версию ANSI или Юникод этой функции на основе определения константы препроцессора UNICODE. Сочетание использования псевдонима, не зависящий от кодировки, с кодом, не зависящим от кодировки, может привести к несоответствиям, которые приводят к ошибкам компиляции или среды выполнения. Дополнительные сведения см. в разделе Соглашения для прототипов функций.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Professional [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header wingdi.h (включая Windows.h)
Библиотека Gdi32.lib
DLL Gdi32.dll

См. также раздел

Функции шрифта и текста

Общие сведения о шрифтах и тексте

GetTextAlign

RECT

SelectObject

SetBkColor

SetTextAlign

SetTextColor