Функция 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
Указывает, как использовать определяемый приложением прямоугольник. Этот параметр может быть одним или несколькими из следующих значений.
Значение | Значение |
---|---|
|
Текст будет обрезан прямоугольником. |
|
Массив lpString относится к массиву, возвращенному из GetCharacterPlacement , и его необходимо анализировать непосредственно с помощью GDI, так как дальнейшая обработка для конкретного языка не требуется. Индексирование глифов применяется только к шрифтам TrueType, но флаг можно использовать для точечных и векторных шрифтов, чтобы указать, что дальнейшая языковая обработка не требуется, и GDI должен обрабатывать строку напрямую. Обратите внимание, что все индексы глифов являются 16-разрядными значениями, несмотря на то, что строка считается массивом 8-разрядных значений для растровых шрифтов.
Для ExtTextOutW индексы глифов сохраняются в метафайл. Однако для отображения правильных символов метафайл должен воспроизводиться с использованием одного и того же шрифта. Для ExtTextOutA индексы глифов не сохраняются. |
|
Зарезервировано для системного использования. Если приложение устанавливает этот флаг, оно теряет поддержку международных сценариев и в некоторых случаях может вообще не отображать текст. |
|
Для отображения чисел используйте европейские цифры. |
|
Для отображения чисел используйте цифры, соответствующие языковому стандарту. |
|
Для заливки прямоугольника следует использовать текущий цвет фона. |
|
Если этот параметр задан, массив, на который указывает lpDx , содержит пары значений. Первое значение каждой пары— это, как обычно, расстояние между источниками смежных символьных ячеек, а второе значение — это смещение по вертикали шрифта. |
|
Выпуск 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 . Для выравнивания текста можно использовать следующие значения. Из тех, которые влияют на горизонтальное и вертикальное выравнивание, можно выбрать только один флаг. Кроме того, можно выбрать только один из двух флагов, изменяющих текущую позицию.
Если параметр 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 |