Функция GetTextExtentPoint32 вычисляет ширину и высоту заданной строки текста.
Синтаксис
BOOL GetTextExtentPoint32( HDC hdc, // дескриптор DC LPCTSTR lpString, // строка текста int cbString, // символы в строке LPSIZE lpSize // размер строки ); |
Обратите внимание! на то, что для функции ANSI, буквы в кодовых страницах SBCS (набора однобайтовых символов) берут по одному байту каждый, в то время как большинство букв в кодовых страницах DBCS (набора двухбайтовых символов) берут два байта; для функции Unicode наиболее правильное определение символов Unicode (это в Основной Многоязычной плоскости - Basic Multilingual Plane(BMP)) - одно слово (WORD), в то время как в заменителях Unicode - это два слова (WORD). |
Windows 95/98/Me: Это значение не может быть больше чем 8192.
Если функция завершается успешно, возвращаемое значение не нуль.
Если функция завершается с ошибкой, величина возвращаемого значения - ноль.
Windows NT/2000/XP: Чтобы получить дополнительную информацию об ошибке, вызовите функцию GetLastError.
Функция GetTextExtentPoint32 использует текущий выбранный шрифт, чтобы вычислить размеры строки. Ширина и высота, в логических единицах измерения вычисляются без учета какого-либо отсечения.
Поскольку некоторые символы несут в себе выносные элементы , сумма протяженностей символов в строке может быть не равной общей длине строки.
Windows 95/98/Me: Для совместимости с Windows 3.1, функция GetTextExtentPoint32 прибавляет дополнительный пиксель при моделировании полужирных шрифтов . Однако, полужирный шрифт Tahoma не моделируется, так что он не имеет дополнительного пикселя. Чтобы исправить дополнительным пикселем моделирование полужирного шрифта , уменьшите длину каждой подстроки для передачи в GetTextExtentPoint32 на один пиксель и добавьте дополнительный пиксель для всей строки.
Windows XP: Расчетная ширина строки принимает во внимание межсимвольный интервал, установленный функцией SetTextCharacterExtra и выравнивание, установленное функцией SetTextJustification. Это истинно и для отображения на экране и для печати. Однако, если параметр lpDx в функции ExtTextOut установлен, GetTextExtentPoint32 не принимает во внимание ни межсимвольный интервал, ни выравнивание. Кроме того, для расширенного метафайла печати (EMF), результат печати всегда принимает во внимание и межсимвольный интервал и выравнивание.
Windows 2000:Когда мы имеем дело с текстом, показываемым
на экране, расчетная ширина строки
принимает во внимание межсимвольный
интервал, установленный функцией SetTextCharacterExtra
и выравнивание, установленное функцией SetTextJustification. Однако, если параметр lpDx
в функции ExtTextOut установлен, GetTextExtentPoint32
не принимает во внимание ни межсимвольный
интервал, ни выравнивание. Однако, при
печати с расширенным метафайлом печати (EMF):
При возвращении протяженности текста, эта
функция предполагает, что текст
горизонтален, то есть что наклон является
всегда 0. Это истинно и для горизонтальных и
для вертикальных размеров текста. Даже если
используется шрифт, определяющий наклон
отличный от нуля, эта функция не будет
использовать угол при вычислении текстовой
протяженности - приложение должно
преобразовать это явно.
Windows 95/98/Me: Хотя GetTextExtentPoint32W существует в Windows 95/98/Me, она поддерживается подпрограммой Microsoft Layer for Unicode, чтобы давать более совместимое поведение во всех операционных системах Windows. Чтобы использовать ее, Вы должны добавить некоторые файлы к вашему приложению, как изложено в требованиях этой подпрограммы для систем Windows 95/98/Me.
Пример смотри в статье Написание текста различными шрифтами в одной и той же строке.
Обзор шрифты и текст, Функции, используемые шрифтами и текстом, ExtTextOut, SetTextCharacterExtra, SetTextJustification, SIZE
Размещение и совместимость GetTextExtentPoint32 |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Да версии 3.5 и выше |
Windows Me |
Да |
Windows 98 |
Да |
Windows 95 |
Да |
Используемая библиотека |
Gdi32.lib |
Заголовочный файл |
|
- объявлено в |
Wingdi.h |
- включено в |
Windows.h |
Unicode |
Реализуется как версии Unicode и ANSI во всех платформах. Поддерживается также подпрограммой Microsoft Layer for Unicode |
Замечания по платформе |
Не имеется |