Печать и вывод текста, страница 6

Включаемый файл                   wingdi.h

См. также          GetCharWidth32

Определение ABC typedef struct   ABC{

int           abcA;

UINT         abcB ;

int          abcC; }  ABC;   

Члены

abcA

int. Интервал А символа. Это — расстояние, которое должно быть добавлено к текущей позиции перед выводом глифа символа.

abcB

UINT. Интервал В символа. Это — ширина выведенной части глифа символа.

abcC

int. Интервал С символа. Это — расстояние, которое должно быть добавлено к текущей позиции для создания пробельного промежутка справа от глифа символа.

Пример

В следующем примере, показанном на рис. 14.3, отображается ширина

символов W и X, когда пользователь выбирает пункт меню Test!. Значение ширины этих символов определяются из данных шрифта "Times New Roman", который создается и выбирается для контекста устройства главного окна.

СМ.    \loctl-sources\chapl4\14-06.txt

GetCharABCWidthsFloat                 « Windows 98   • Windows 2000

Описание

Функция GetCharABCWidthsFloat позволяет определить ширину последовательных символов из текущего шрифта в указанном диапазоне (в логических единицах длины). В отличие от функции GetCharABCWidths, настоящая функция может применяться с любым шрифтом.

Синтаксис

BOOL GetCharABCWidthsFloat( HDC hDC, UINT uFirstChar, UINT uLastChar, LPABCFLOAT Ipabc )

Параметры

HDC

HDC. Контекст устройства.

uFirstChar

UINT. Первый символ в диапазоне символов текущего шрифта.

nLastChar

UINT. Последний символ в диапазоне символов текущего шрифта.

Ipabc

LPABCFLOAT. Указатель на массив структур ABCFLOAT, который принимает значения ширины символов при возвращении из функции. Определение структуры ABCFLOAT приведено ниже.

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

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

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

wingdi.h

См. также          GetCharWidthFloat

Определение ABCFLOATtypedef struct   ABCFLOAT {

FLOAT       abcA;

FLOAT       abcB;

FLOAT       abcC; }   ABC;

Члены

abcA

FLOAT. Интервал А символа. Это — расстояние, которое должно быть добавлено к текущей позиции перед выводом глифа символа.

abcB

FLOAT. Интервал В символа. Это — ширина выведенной части глифа символа.

abcC

FLOAT. Интервал С символа. Это — расстояние, которое должно быть добавлено к текущей позиции для создания пробельного промежутка справа от глифа символа.

GetCharABCWidthsl                     Windows 98   • Windows 2000

Описание

Функция GetCharABCWidthsl позволяет определить ширину последовательных индексов глифов текущего шрифта TrueType в указанном диапазоне (в логических единицах длины).

Синтаксис

BOOL GetCharABCWidthsI( HDC hDC, UINT giFirst, UINT cgi, LPWORD pgi, LPABC Ipabc )

Параметры

hDC

HDC. Контекст устройства.

gifirst

UINT. Первый индекс глифа в группе последовательных индексов глифов текущего шрифта. Этот параметр применяется, только если параметр pgi равен -NULL.

cgi

UINT. Число индексов глифов.

Pgi

LPWORD. Указатель на массив, который содержит индексы глифов. Если этот параметр равен NULL, вместо него используется параметр gifirst. Параметр cgi указывает число индексов глифов в этом массиве.

Ipabc

LPABC. Указатель на массив структур ABC, который принимает значения ширины символов. Этот массив должен содержать, по меньшей мере, столько структур ABC, сколько имеется индексов глифов, указанных параметром cgi.

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

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

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

wingdi.h

См. также

GetCharWidth

GetCharacterPlacement                  Windows 98   • Windows 2000

Описание

Функция GetCharacterPlacement позволяет получить информацию о том, как отображается в контексте устройства символьная строка, например значение ширины символов, позицию знака вставки, упорядочение внутристроки и представление глифов. Эта функция обеспечивает правильную обработку текста в приложении, независимо от региональных установок и типов доступных шрифтов. Эту функцию следует использовать перед вызовом функции ExtTextOut и вместо функции GetTextExtentPoint32. Для нелатинских шрифтов можно повысить скорость вывода текста функцией ExtTextOut в приложении, вызывая функцию GetCharacterPlacement перед вызовом ExtTextOut при повторном выводе одного и того же текста или при использовании межсимвольного интервала для размещения знака вставки

Синтаксис

DWORD GetCharacterPIacement( HDC hDC, LPCSTR IpString, int nCount, int nMaxExtent, GCP_RESULTS IpResults, DWORD dwflags )

Параметры

hDC

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

IpString

LPCSTR Указатель на символьную строку, которая должна быть обработана.

п Count

int. Число символов в строке, указанной параметром IpString.

nMaxExtent

int. Максимальный экстент (ширина) выходной строки. Этот параметр применяется, только в тех случаях, когда в параметре dwFlags указано значение GCP_MAXEXTENT или GCP_JUSTIFY.

IpResults

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

dwFlags

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

Таблица 14.20. Значения параметра dwFlags функции GetCharacterPlacement

Значение

Описание

GCP_CLASSIN

Массив IpClass после ввода содержит промежуточные результаты классификации символов. Все допустимые ненулевые значения остаются неизменными, а для других входов массива функция GetCharacterPlacement устанавливает соответствующие классификационные значения.

GCP_DIACRmC

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

GCP_IMSPLAYZWG

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

GCP_GLYPHSHAPE

Отображать символы с использованием нестандартных форм.

GCP_JUSnFY

Дополнять экстенты в массиве IpDx так, чтобы длина строки была равна значению, указанному параметром nMaxExtent. Этот флажок должен применяться вместе с флажком GCP_MAXEXTENT.

GCP_JUSTIFYIN

Массив IpDx после ввода содержит веса выравнивания. Вес выравнивания для неарабских шрифтов может иметь значение 0 или 1 , где 1 указывает, что для выравнивания ширина символа может увеличиваться. Для арабских шрифтов вес выравнивания может находиться в диапазоне от 0 до 8.

GCP_KASHIDA

Для изменения длины строки таким образом, чтобы она была равна значению, указанному параметром nMaxExtent, использовать кашиды (протяжки, применяемые в арабском письме) вместо дополнений. Кашида обозначается отрицательным индексом выравнивания в массиве IpDx. Этот флажок должен использоваться вместе с флажком GCP_JUSTIFY, и только при том условии, что шрифт (и язык) поддерживает кашиды.

GCPJ.IGATE

Использовать лигатуры для символов, которые могут быть соединены в лигатуру. Если для этого набора символов требуется флажок GCP_REORDER, но он не установлен, вывод будет бессмысленным.

GCP_MAXEXTENT

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

GCP_NEUTRALOVERRIDE

Отменить обычную обработку нейтральных символов и рассматривать их как сильные символы, которые соответствуют порядку чтения строк.

GCP_NUMERICOVERRIDE

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

GCP_NUMERICSLATIN

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

GCP_NUMERICSLOCAL

Использовать для цифр глифы, предусмотренные региональными установками, и отменить значения, применяемые в системе по умолчанию.

GCP_NODIACRITICS

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

GCPJJEORDER

Переупорядочить строку. Обычно используется для шрифтов, которые не принадлежат к однобайтовым наборам символов (SBCS — single-byte character set) и не предусматривают порядка чтения слева направо. Если этот флажок не установлен, предполагается, что строка приведена в порядке отображения.

GCP_SYMSWAPOFF

Указывает, что переставляемые символы не переустановлены.

GCP_USEKERNING

Использовать в шрифте пары, допускающие регулирование межсимвольного просвета (апроша).

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

DWORD. В случае успешного выполнения возвращаемое значение аналогично значению, возвращаемому функцией GetTextExtentPoint32; в ином случае возвращаемое значение — нуль.

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

wingdi.h

См. также

ExtTextOut, GetTextExtentPoint32

Определение GCP_RESULTStypedef struct tagGCP RESULTS {

DWORD       IStructSize;

LPTSTR    IpOutString;

UINT*       IpOrder;

INT*         IpDx ;

INT*         IpCaretPos ;

LPTSTR    IpClass ;

LPWSTR       IpGlyphs ;

UINT         nGlyphs ;

int          nMaxFit; }   GCPJUESULTS ;

Члены

IStructSize

DWORD. Размер структуры в байтах.

IpOutString

LPTSTR. Адрес буфера, который принимает выходную строку. Устанавливается равным NULL, если выходная строка не требуется.

IpOrder

UINT*. Адрес массива, который принимает индексы упорядочения для символов в выходной строке. Устанавливается равным NULL, если упорядочение индексов не требуется. Первоначальная строка требует переупорядочения, если функция GetFontLanguagelnfo возвращает значение GCP_REORDER.

IpDx

INT*. Адрес массива, который принимает значения расстояний между смежными символьными ячейками. Устанавливается равным NULL, если эти расстояния не требуются. Если выполнено преобразование в глифы, то эти расстояния относятся к глифам, а не к символам, поэтому результирующий массив может использоваться в функции ExtTextOut. Если установлен флажок GCP_JUSTIFYIN, после ввода этот член должен содержать значения весов выравнивания. Расстояния в этом массиве указаны в порядке отображения. Чтобы найти расстояние для i'-го символа в первоначальной строке, можно использовать массив IpOrder следующим образом: width =   1рОх[   Ip0rder[i]   ]

IfCantPaa

INT*. Адрес массива, который принимает значения позиции знака вставки. Устанавливается равным NULL, если позиции знака вставки определять не требуется. Этот массив соответствует первоначальной строке, а не выходной строке, а это значит, что некоторые смежные значения могут быть одинаковыми.

If&m

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

IpGlyphs

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

nGlyphs

UINT. Число значений в массивах IpGlyph и IpDx. После ввода этот член должен быть установлен равным размерам массивов, указанных членами IpGlyph и IpDx.