На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

GCP_RESULTS



The GCP_RESULTS structure contains information about characters in a string. This structure receives the results of the GetCharacterPlacement function. For some languages, the first element in the arrays may contain more, language-dependent information.

typedef struct tagGCP_RESULTS {
DWORD lStructSize;
LPTSTR lpOutString;
UINT *lpOrder;
INT *lpDx;
INT *lpCaretPos;
LPTSTR lpClass;
UINT *lpGlyphs;
UINT nGlyphs;
UINT nMaxFit;
} GCP_RESULTS;


Members

lStructSize

Specifies the size, in bytes, of the structure.

lpOutString

Pointer to the buffer that receives the output string or is NULL if the output string is not needed. The output string is a version of the original string that is in the order that will be displayed on a given device. Typically the output string is identical to the original string, but may be different if the string needs reordering and the GCP_REORDER flag is set or if the the original string exceeds the maximum extent and the GCP_MAXEXTENT flag is set.

lpOrder

Address of the array that receives the ordering indices for the characters in the output string or is NULL if the ordering indices are not needed. The original string needs reordering if the GetFontLanguageInfo function returns the GCP_REORDER value. This is typically used when GetFontLanguageInfo returns the GCP_REORDER flag. For example, in Hebrew, in which the text runs from right to left, the lpOrder array gives the exact locations of each element in the original string.

lpDx

Pointer to the array that receives the distances between adjacent character cells or is NULL if these distances are not needed. If glyph rendering is done, the distances are for the glyphs not the characters, so the resulting array can be used with the ExtTextOut function.
The distances in this array are in display order. To find the distance for the ith character in the original string, use the lpOrder array as follows:

width = lpDx[lpOrder[i]];


On input, this member may contain justification weight values if the GCP_JUSTIFYIN value is given with the GetCharacterPlacement function.

lpCaretPos

Pointer to the array that receives the caret position values or is NULL if caret positions are not needed. Each value specifies the caret position immediately before the corresponding character. In some languages the position of the caret for each character may not be immediately to the left of the character. For example, in Hebrew, in which the text runs from right to left, the caret position is to the right of the character. If glyph ordering is done, lpCaretPos matches the original string not the output string. This means that some adjacent values may be the same.

The values in this array are in input order. To find the caret position value for the ith character in the original string, use the array as follows:

position = lpCaretPos[i];


lpClass

Pointer to the array that contains and/or receives character classifications. The values indicate how to lay out characters in the string and are similar (but not identical) to the CT_CTYPE2 values returned by the GetStringTypeEx function. Each element of the array can be set to zero or one of the following values:

Value Meaning
GCPCLASS_ARABIC Arabic character.
GCPCLASS_HEBREW Hebrew character.
GCPCLASS_LATIN Character from a Latin or other single-byte character set for a left-to-right language.
GCPCLASS_LATINNUMBER Digit from a Latin or other single-byte character set for a left-to-right language.
GCPCLASS_LOCALNUMBER Digit from the character set associated with the current font.


In addition, the following can be used when supplying values in the lpClass array with the GCP_CLASSIN flag.

Value Meaning
GCPCLASS_LATINNUMERICSEPARATOR Input only. Character used to separate Latin digits, such as acomma or decimal point.
GCPCLASS_LATINNUMERICTERMINATOR Input only. Character used to terminate Latin digits, such as a plus or minus sign.
GCPCLASS_NEUTRAL Input only. character has no specific classification.
GCPCLASS_NUMERICSEPARATOR Input only. Character used to separate digits, such as a comma or decimal point.


For languages that use the GCP_REORDER flag, the following values can also be used with the GCP_CLASSIN flag. Unlike the preceding values, which can be used anywhere in the lpClass array, all of the following values are used only in the first location in the array. All combine with other classifications. Note that GCPCLASS_PREBOUNDLTR and GCPCLASS_PREBOUNDRTL are mutually exclusive, as are GCPCLASSPOSTBOUNDLTR and GCPCLASSPOSTBOUNDRTL.

Value Meaning
GCPCLASS_PREBOUNDLTR Set lpClass[0] to GCP_CLASS_PREBOUNDLTR to bind the string to left-to-right reading order before the string.
GCPCLASS_PREBOUNDRTL Set lpClass[0] to GCP_CLASS_PREBOUNDRTL to bind the string to right-to-left reading order before the string.
GCPCLASS_POSTBOUNDLTR Set lpClass[0] to GCP_CLASS_POSTBOUNDLTR to bind the string to left-to-right reading order after the string.
GCPCLASS_POSTBOUNDRTL Set lpClass[0] to GCP_CLASS_POSTBOUNDRTL to bind the string to right-to-left reading order after the string.


To force the layout of a character to be carried out in a specific way, preset the classification for the corresponding array element; the function leaves such preset classifications unchanged and computes classifications only for array elements that have been set to zero. Preset classifications are used only if the GCP_CLASSIN flag is set and the lpclass array is supplied.
If getFontLanguageInfo does not return GCP_REORDER for the current font, only the GCPCLASS_LATIN value is meaningful.

lpGlyphs

Pointer to the array that receives the values identifying the glyphs used for rendering the string or is NULL if glyph rendering is not needed. The number of glyphs in the array may be less than the number of characters in the original string if the string contains ligated glyphs. Also if reordering is required, the order of the glyphs may not be sequential.

This array is useful if more than one operation is being done on a string which has any form of ligation, kerning or order-switching. Using the values in this array for subsequent operations saves the time otherwise required to generate the glyph indices each time.
This array always contains glyph indices and the ETO_GLYPH_INDEX value must always be used when this array is used with the ExtTextOut function.
When GCP_LIGATE is used, you can limit the number of characters that will be ligated together. (In Arabic for example, three-character ligations are common). This is done by setting the maximum required in lpGcpResults->lpGlyphs[0]. If no maximum is required, you should set this field to zero.

For languages such as Arabic, where GetFontLanguageInfo returns the GCP_GLYPHSHAPE flag, the glyphs for a character will be different depending on whether the character is at the beginning, middle, or end of a word. Typically, the first character in the input string will also be the first character in a word, and the last character in the input string will be treated as the last character in a word. However, if the displayed string is a subset of the complete string, such as when displaying a section of scrolled text, this may not be true. In these cases, it is desirable to force the first or last characters to be shaped as not being initial or final forms. To do this, again, the first location in the lpGlyphs array is used by performing an OR operation of the ligation value above with the values GCPGLYPH_LINKBEFORE and/or GCPGLYPH_LINKAFTER. For example, a value of GCPGLYPH_LINKBEFORE | 2 means that two-character ligatures are the maximum required, and the first character in the string should be treated as if it is in the middle of a word.

nGlyphs

On input, this member must be set to the size of the arrays pointed to by the array pointer members. On output, this is set to the number of glyphs filled in, in the output arrays. If glyph substitution is not required (that is, each input character maps to exactly one glyph), this member is the same as it is on input.

nMaxFit

Number of characters that fit within the extents specified by the nMaxExtent parameter of the GetCharacterPlacement function. If the GCP_MAXEXTENT or GCP_JUSTIFY value is set, this value may be less than the number of characters in the original string. This member is set regardless of whether the GCP_MAXEXTENT or GCP_JUSTIFY value is given. Unlike nGlyphs, which specifies the number of output glyphs, nMaxFit refers to the number of characters from the input string. For Latin SBCS languages, this will be the same.



Remarks

Whether the lpGlyphs, lpOutString, or neither is required depends on the results of the GetFontLanguageInfo call.
In the case of a font for a language such as English, in which none of the GCP_DBCS, GCP_REORDER, GCP_GLYPHSHAPE, GCP_LIGATE, GCP_DIACRITIC, or GCP_KASHIDA flags are returned, neither of the arrays is required for proper operation. (Though not required, they can still be used. If the lpOutString array is used, it will be exactly the same as the lpInputString passed to GetCharacterPlacement.) Note, however, that if GCP_MAXEXTENT is used, then lpOutString will contain the truncated string if it is used, NOT an exact copy of the original.

In the case of fonts for languages such as Hebrew, which DO have reordering but do not typically have extra glyph shapes, lpOutString should be used. This will give the string on the screen-readable order. However, the lpGlyphs array is not typically needed. (Hebrew can have extra glyphs, if the font is a TrueType/Open font.)
In the case of languages such as Thai or Arabic, in which GetFontLanguageInfo returns the GCP_GLYPHSHAPE flag, the lpOutString will give the display-readable order of the string passed to GetCharacterPlacement, but the values will still be the unshaped characters. For proper display, the lpGlyphs array must be used.

See Also

ExtTextOut, GetCharacterPlacement, GetFontLanguageInfo


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

GCP_RESULTS



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

typedef struct tagGCP_RESULTS { DWORD lStructSize;
lpOutString LPTSTR;
UINT *lpOrder;
INT *lpDx;
INT *lpCaretPos;
LPTSTR lpClass;
UINT *lpGlyphs;
UINT nGlyphs;
UINT nMaxFit;
} GCP_RESULTS;


Участники

lStructSize

Определяет размер, в байтах, структуры.

lpOutString

Указатель в буфер, который получает выходную строку или НЕДЕЙСТВИТЕЛЕН если выходная строка - не нужно. Выходная строка является версией оригинальной строки, которая - в заказываться, что будет отображен на данном устройстве. Обычно выходная строка идентична оригинальной строке, но может быть другим если строке нужно переупорядочение и флаг GCP_REORDER установлен или если оригинальная строка превышает максимальную степень и флаг GCP_MAXEXTENT установлен.

lpOrder

Адресуйте массив, который получает заказывающие индексы для символов в выходной строке или НЕДЕЙСТВИТЕЛЕН если заказывающие индексы - не нужно. Оригинальной строке нужно переупорядочение если функциональный возврат GetFontLanguageInfo величина GCP_REORDER. Это обычно использован когда GetFontLanguageInfo возвращает флаг GCP_REORDER. Например, в Еврее, в котором текст работает из справа налево, массив lpOrder дает точные позиции каждого элемента в оригинальной строке.

lpDx

Указатель в массив, который получает расстояния между смежными символьными ячейками или НЕДЕЙСТВИТЕЛЕН если эти расстояния - не нужно. Если glyph предоставление сделано, расстояния - для glyphs не символы, так что результирующий массив может быть использован функцией ExtTextOut.
Расстояния в этом массиве - в дисплейном порядке. Для того, чтобы находить расстояние для ith символа в оригинальной строке, используйте массив lpOrder следующим образом:

ширина = lpDx[lpOrder[я]];


На вводе, этот элемент может содержать величины веса оправдания если величина GCP_JUSTIFYIN дана функцией GetCharacterPlacement.

lpCaretPos

Указатель в массив, который получает символ ^ позиции величин или НЕДЕЙСТВИТЕЛЕН если символ ^ позиций - не нужно. Каждая величина определяет символ ^ позиции немедленно перед соответствующим символом. На некоторых языках позиция символа ^ для каждого символа не может быть немедленно налево символа. Например, в Еврее, в котором текст работает из справа налево, символ ^ позиции - вправо от символа. Если glyph упорядочение сделано, lpCaretPos соответствует оригинальной строке не выходная строка. Это означает, что немного смежные величины могут быть теми же.

Величины в этом массиве - в входном порядке. Для того, чтобы находить символ ^ позиции величины для ith символа в оригинальной строке, используйте массив следующим образом:

спозиционируйте = lpCaretPos[i];


lpClass

Указатель в массив, который содержит и/или символьные классификации приемников. Величины указывают как, чтобы класть символы в строку и - аналогичный (но не идентичный) в величины CT_CTYPE2 возвращанные функцией GetStringTypeEx. Каждый элемент массива может быть установлен в нуль или одно из следующего оценивает:

Значение Величины
Арабский символ GCPCLASS_ARABIC.
символ Еврея GCPCLASS_HEBREW.
Символ GCPCLASS_LATIN из Латинского или другого единственного-байтового набора символов для языка левого права.
Цифра GCPCLASS_LATINNUMBER из Латинского или другого единственного-байтового набора символов для языка левого права.
Цифра GCPCLASS_LOCALNUMBER из набора символов связывалась текущим шрифтом.


Кроме того, следующее может быть использовано при поставке величин в массиве lpClass с флагом GCP_CLASSIN.

Значение Величины
Ввод GCPCLASS_LATINNUMERICSEPARATOR только. Символ использованный, чтобы разделять Латинские цифры, как например, acomma или знак десятичной дроби.
Ввод GCPCLASS_LATINNUMERICTERMINATOR только. Символ использованный, чтобы завершать Латинские цифры, как например, plus или минус знак.
only. символ Ввода GCPCLASS_NEUTRAL не имеет специфическую классификацию.
Ввод GCPCLASS_NUMERICSEPARATOR только. Символ использованный, чтобы разделять цифры, как например, запятая или знак десятичной дроби.


Для языков, которые используют флаг GCP_REORDER, следующее величин может также использовано флагом GCP_CLASSIN. В отличие от предыдущих величин, которые могут использоваться везде в массиве lpClass, все следующие величины используются только в первой позиции в массиве. Все объединяются с другими классификациями. Отметьте, что GCPCLASS_PREBOUNDLTR и GCPCLASS_PREBOUNDRTL взаимно исключительные, что - GCPCLASSPOSTBOUNDLTR и GCPCLASSPOSTBOUNDRTL.

Значение Величины
GCPCLASS_PREBOUNDLTR был Установлен lpClass[0] на GCP_CLASS_PREBOUNDLTR, чтобы связывать строку в порядок левого права чтения перед строкой.
GCPCLASS_PREBOUNDRTL был Установлен lpClass[0] на GCP_CLASS_PREBOUNDRTL, чтобы связывать строку на оставившее право, читающее порядок перед строкой.
GCPCLASS_POSTBOUNDLTR был Установлен lpClass[0] на GCP_CLASS_POSTBOUNDLTR, чтобы связывать строку в порядок левого права чтения после строки.
GCPCLASS_POSTBOUNDRTL был Установлен lpClass[0] на GCP_CLASS_POSTBOUNDRTL, чтобы связывать строку на оставившее право, читающее порядок после строки.


Для того, чтобы заставлять формат символа, который нужно выполнять в специфическом пути, инициализируйте классификацию для соответствующего элемента массива; функция оставляет такое инициализировать классификации неизменные и вычисляет классификации только для элементов массива, которые установлены в нуль. Инициализируйте классификации использоваться только если флаг GCP_CLASSIN установлен и lpclass массив поставлен.
Если getFontLanguageInfo не возвращает GCP_REORDER для текущего шрифта, только величина GCPCLASS_LATIN значимая.

lpGlyphs

Указатель в массив, который получает величины, опознающие glyphs использованными для предоставления строки или НЕДЕЙСТВИТЕЛЕН если glyph предоставление - не нужно. Число glyphs в массиве может быть менее чем количество символов в оригинальной строке если строка содержит ligated glyphs. Также если переупорядочение потребовалось, порядок glyphs не может быть последовательным.

Этот массив полезный если более, чем одна операция сделает в строке, которая имеет любую форму ligation, kerning или порядка-переключения. Использование величин в этом массиве для последующих операций сохраняет время в противном случае требуется генерировать индексы glyph всякий раз, когда.
Этот массив всегда содержит glyph индексы и величина ETO_GLYPH_INDEX должна всегда использована когда этот массив использован функцией ExtTextOut.
Когда GCP_LIGATE использован, Вы можете ограничить количество символов, которые ligated вместе. (В Арабском например, трех символьные ligations - общий). Это сделан посредством установки максимума требовавшегося в lpGcpResults->lpGlyphs[0]. Если никакой максимум не потребовался, Вы должны устанавливать эту область в нуль.

Для языков как например, Арабский, где GetFontLanguageInfo возвращает флаг GCP_GLYPHSHAPE, glyphs для символа быть другим или символ - в начале, середине, или конце слова. Обычно, первый символ в входной строке также будет первым символом в слове, и последний символ в входной строке будет рассмотрен как последний символ в слове. Тем не менее, если отображаемая строка является подмножеством полной строки, как например, при отображении секции прокрученного текста, это не может быть истиной. В этих случаях, желательно должно заставлять первые или последние символы, которые нужно формировать как не начальные или конечные формы. Для того, чтобы делать это, снова, первая позиция в массиве lpGlyphs использована выполнением ИЛИ операцией величины ligation выше с величинами GCPGLYPH_LINKBEFORE и/или GCPGLYPH_LINKAFTER. Например, величина GCPGLYPH_LINKBEFORE | 2 означает, что двух символьные лигатуры являются максимумом требовавшимся, и первый символ в строке должен быть обратиться как будто это - в середине слова.

nGlyphs

На вводе, этот элемент должен быть установлен по величине с подготавливает заостренный, чтобы участниками указателя массива. На выходе, это установлен в число glyphs заполненное, на выходе подготавливается. Если glyph подстановка не потребовалась (то есть, каждые входные символьные карты, чтобы точно один glyph), этот элемент такой же как и это находится на вводе.

nMaxFit

Количество символов, которые устанавливаются в пределах протяженности определенной параметром nMaxExtent функции GetCharacterPlacement. Если GCP_MAXEXTENT или величина GCP_JUSTIFY установлена, эта величина может быть менее чем количество символов в оригинальной строке. Этот элемент установлен независимо от того, что GCP_MAXEXTENT или величина GCP_JUSTIFY дана. В отличие от nGlyphs, которое определяет номер выхода glyphs, nMaxFit имеет отношение к количеству символов из входной строки. Для языков Latin SBCS, это будет тем же.



Замечания

Независимо lpGlyphs, lpOutString, или никакое потребовался зависеть от результатов вызова GetFontLanguageInfo.
В случае шрифта для языка как например, Английский, в котором ни одно из GCP_DBCS, GCP_REORDER, GCP_GLYPHSHAPE, GCP_LIGATE, GCP_DIACRITIC, или флаги GCP_KASHIDA возвращаны, ни одно из подготавливает, необходимо для соответствующей операции. (Все-же не требовавшееся, они могут все еще использованы. Если lpOutString массив использован, он будет точно таким же как и lpInputString пройденное на GetCharacterPlacement.) Примечание, тем не менее, что если GCP_MAXEXTENT использован, затем lpOutString будет содержать усеченную строку если использовано, НЕ точная копия подлинника.

В случае шрифтов для языков как например, Еврей, который ИМЕЕТ преобразовывая но не делает обычно иметь дополнительные glyph формы, lpOutString должно быть использовано. Это даст строку в экранном-удобочитаемом порядке. Тем не менее, массив lpGlyphs - не обычно нужно. (Еврей может иметь дополнительные glyphs, если шрифт является шрифтом TrueType/Open.)
В случае языков как например, Тайский или Арабский, в котором GetFontLanguageInfo возвращает флаг GCP_GLYPHSHAPE, lpOutString даст дисплейный-удобочитаемый порядок строки пройденной на GetCharacterPlacement, но величины все еще будут unshaped символами. Для соответствующего дисплея, массив lpGlyphs должен быть использован.

Смотри Также

ExtTextOut, GetCharacterPlacement, GetFontLanguageInfo


Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz