Compartir a través de


estructura GCP_RESULTSA (wingdi.h)

La estructura GCP_RESULTS contiene información sobre los caracteres de una cadena. Esta estructura recibe los resultados de la función GetCharacterPlacement . En algunos idiomas, el primer elemento de las matrices puede contener más información dependiente del idioma.

Sintaxis

typedef struct tagGCP_RESULTSA {
  DWORD  lStructSize;
  LPSTR  lpOutString;
  UINT   *lpOrder;
  int    *lpDx;
  int    *lpCaretPos;
  LPSTR  lpClass;
  LPWSTR lpGlyphs;
  UINT   nGlyphs;
  int    nMaxFit;
} GCP_RESULTSA, *LPGCP_RESULTSA;

Miembros

lStructSize

Tamaño, en bytes, de la estructura.

lpOutString

Puntero al búfer que recibe la cadena de salida o es NULL si la cadena de salida no es necesaria. La cadena de salida es una versión de la cadena original que está en el orden en que se mostrará en un dispositivo especificado. Normalmente, la cadena de salida es idéntica a la cadena original, pero puede ser diferente si la cadena necesita reordenar y la marca de GCP_REORDER se establece o si la cadena original supera la extensión máxima y se establece la marca de GCP_MAXEXTENT.

lpOrder

Puntero a la matriz que recibe índices de ordenación o es NULL si no se necesitan los índices de ordenación. Sin embargo, su significado depende de los demás elementos de GCP_RESULTS. Si se van a devolver índices de glifo, los índices son para la matriz lpGlyphs ; si no se devuelven índices de glifos y se solicita lpOrder , los índices son para lpOutString. Por ejemplo, en el último caso, el valor de lpOrder[i] es la posición de lpString[i] en la cadena de salida lpOutString.

Normalmente se usa cuando GetFontLanguageInfo devuelve la marca de GCP_REORDER, que indica que la cadena original necesita reordenar. Por ejemplo, en hebreo, en el que el texto se ejecuta de derecha a izquierda, la matriz lpOrder proporciona las ubicaciones exactas de cada elemento de la cadena original.

lpDx

Puntero a la matriz que recibe las distancias entre celdas de caracteres adyacentes o es NULL si estas distancias no son necesarias. Si se realiza la representación del glifo, las distancias son para los glifos no para los caracteres, por lo que la matriz resultante se puede usar con la función ExtTextOut .

Las distancias de esta matriz están en orden de presentación. Para buscar la distancia del carácter i en la cadena original, use la matriz lpOrder de la siguiente manera:


width = lpDx[lpOrder[i]];

lpCaretPos

Puntero a la matriz que recibe los valores de posición de intercalación o es NULL si no se necesitan posiciones de intercalación. Cada valor especifica la posición del símbolo de intercalación inmediatamente antes del carácter correspondiente. En algunos idiomas, la posición del símbolo de intercalación de cada carácter puede no estar inmediatamente a la izquierda del carácter. Por ejemplo, en hebreo, en el que el texto se ejecuta de derecha a izquierda, la posición del símbolo de intercalación es a la derecha del carácter. Si se realiza la ordenación del glifo, lpCaretPos coincide con la cadena original, no la cadena de salida. Esto significa que algunos valores adyacentes pueden ser los mismos.

Los valores de esta matriz están en orden de entrada. Para buscar el valor de posición de intercalación del carácter ien la cadena original, use la matriz de la siguiente manera:


position = lpCaretPos[i];

lpClass

Puntero a la matriz que contiene o recibe clasificaciones de caracteres. Los valores indican cómo diseñar caracteres en la cadena y son similares (pero no idénticos) a los valores de CT_CTYPE2 devueltos por la función GetStringTypeEx . Cada elemento de la matriz se puede establecer en cero o en uno de los valores siguientes.

Valor Significado
GCPCLASS_ARABIC
Carácter árabe.
GCPCLASS_HEBREW
Carácter hebreo.
GCPCLASS_LATIN
Carácter de un alfabeto latino u otro juego de caracteres de un solo byte para un idioma de izquierda a derecha.
GCPCLASS_LATINNUMBER
Dígito de un alfabeto latino u otro juego de caracteres de un solo byte para un idioma de izquierda a derecha.
GCPCLASS_LOCALNUMBER
Dígito del juego de caracteres asociado a la fuente actual.
 

Además, se puede usar lo siguiente al proporcionar valores en la matriz lpClass con la marca GCP_CLASSIN.

Valor Significado
GCPCLASS_LATINNUMERICSEPARATOR
Solo entrada. Carácter usado para separar dígitos latinos, como una coma o un separador decimal.
GCPCLASS_LATINNUMERICTERMINATOR
Solo entrada. Carácter usado para finalizar dígitos latinos, como un signo más o menos.
GCPCLASS_NEUTRAL
Solo entrada. El carácter no tiene ninguna clasificación específica.
GCPCLASS_NUMERICSEPARATOR
Solo entrada. Carácter usado para separar dígitos, como una coma o un separador decimal.
 

En el caso de los idiomas que usan la marca GCP_REORDER, también se pueden usar los valores siguientes con la marca GCP_CLASSIN. A diferencia de los valores anteriores, que se pueden usar en cualquier parte de la matriz lpClass , todos los valores siguientes solo se usan en la primera ubicación de la matriz. Todas se combinan con otras clasificaciones.

Tenga en cuenta que GCPCLASS_PREBOUNDLTR y GCPCLASS_PREBOUNDRTL son mutuamente excluyentes, ya que son GCPCLASSPOSTBOUNDLTR y GCPCLASSPOSTBOUNDRTL.

Valor Significado
GCPCLASS_PREBOUNDLTR
Establezca lpClass[0] en GCPCLASS_PREBOUNDLTR para enlazar la cadena al orden de lectura de izquierda a derecha antes de la cadena.
GCPCLASS_PREBOUNDRTL
Establezca lpClass[0] en GCPCLASS_PREBOUNDRTL para enlazar la cadena al orden de lectura de derecha a izquierda antes de la cadena.
GCPCLASS_POSTBOUNDLTR
Establezca lpClass[0] en GCPCLASS_POSTBOUNDLTR para enlazar la cadena al orden de lectura de izquierda a derecha después de la cadena.
GCPCLASS_POSTBOUNDRTL
Establezca lpClass[0] en GCPCLASS_POSTBOUNDRTL para enlazar la cadena al orden de lectura de derecha a izquierda después de la cadena.
 

Para forzar que el diseño de un carácter se lleve a cabo de forma específica, preestablece la clasificación del elemento de matriz correspondiente; la función deja estas clasificaciones preestablecidas sin cambios y calcula las clasificaciones solo para los elementos de matriz que se han establecido en cero. Las clasificaciones preestablecidas solo se usan si se establece la marca de GCP_CLASSIN y se proporciona la matriz lpClass .

Si GetFontLanguageInfo no devuelve GCP_REORDER para la fuente actual, solo el valor de GCPCLASS_LATIN es significativo.

lpGlyphs

Puntero a la matriz que recibe los valores que identifican los glifos usados para representar la cadena o es NULL si no se necesita la representación del glifo. El número de glifos de la matriz puede ser menor que el número de caracteres de la cadena original si la cadena contiene glifos ligados. Además, si es necesario reordenar, es posible que el orden de los glifos no sea secuencial.

Esta matriz es útil si se realiza más de una operación en una cadena que tiene cualquier forma de ligadura, kerning o cambio de orden. El uso de los valores de esta matriz para las operaciones posteriores ahorra el tiempo necesario para generar los índices de glifo cada vez.

Esta matriz siempre contiene índices de glifo y el valor de ETO_GLYPH_INDEX siempre debe usarse cuando esta matriz se usa con la función ExtTextOut .

Cuando se usa GCP_LIGATE, puede limitar el número de caracteres que se ligarán juntos. (Por ejemplo, en árabe, las ligaciones de tres caracteres son comunes). Esto se hace estableciendo el máximo necesario en lpGcpResults-lpGlyphs>[0]. Si no se requiere ningún máximo, debe establecer este campo en cero.

En el caso de idiomas como árabe, donde GetFontLanguageInfo devuelve la marca GCP_GLYPHSHAPE, los glifos de un carácter serán diferentes en función de si el carácter está al principio, al medio o al final de una palabra. Normalmente, el primer carácter de la cadena de entrada también será el primer carácter de una palabra y el último carácter de la cadena de entrada se tratará como el último carácter de una palabra. Sin embargo, si la cadena mostrada es un subconjunto de la cadena completa, como al mostrar una sección del texto desplazado, puede que esto no sea true. En estos casos, es conveniente forzar la forma de los primeros o últimos caracteres como no iniciales o finales. Para ello, de nuevo, la primera ubicación de la matriz lpGlyphs se usa realizando una operación OR del valor de ligación anterior con los valores GCPGLYPH_LINKBEFORE o GCPGLYPH_LINKAFTER. Por ejemplo, un valor de GCPGLYPH_LINKBEFORE | 2 significa que las ligaduras de dos caracteres son el máximo necesario y el primer carácter de la cadena debe tratarse como si estuviera en medio de una palabra.

nGlyphs

En la entrada, este miembro debe establecerse en el tamaño de las matrices a las que apuntan los miembros del puntero de matriz. En la salida, se establece en el número de glifos rellenados, en las matrices de salida. Si no se requiere la sustitución del glifo (es decir, cada carácter de entrada se asigna a exactamente un glifo), este miembro es el mismo que en la entrada.

nMaxFit

Número de caracteres que caben en las extensiones especificadas por el parámetro nMaxExtent de la función GetCharacterPlacement . Si se establece el valor de GCP_MAXEXTENT o GCP_JUSTIFY, este valor puede ser menor que el número de caracteres de la cadena original. Este miembro se establece independientemente de si se especifica el valor GCP_MAXEXTENT o GCP_JUSTIFY. A diferencia de nGlyphs, que especifica el número de glifos de salida, nMaxFit hace referencia al número de caracteres de la cadena de entrada. En el caso de los idiomas SBCS latinos, será el mismo.

Comentarios

Si los lpGlyphs, lpOutString o ninguno de ellos dependen de los resultados de la llamada a GetFontLanguageInfo .

En el caso de una fuente para un idioma como el inglés, en el que no se devuelve ninguno de los GCP_DBCS, GCP_REORDER, GCP_GLYPHSHAPE, GCP_LIGATE, GCP_DIACRITIC o marcas de GCP_KASHIDA, no se requiere ninguna de las matrices para un funcionamiento adecuado. (Aunque no es necesario, todavía se pueden usar. Si se usa la matriz lpOutString , será exactamente igual que el lpInputString pasado a GetCharacterPlacement). Sin embargo, tenga en cuenta que si se usa GCP_MAXEXTENT, lpOutString contendrá la cadena truncada si se usa, NO una copia exacta del original.

En el caso de fuentes para idiomas como hebreo, que DO tienen reordenación, pero no suelen tener formas de glifo adicionales, se debe usar lpOutString . Esto proporcionará la cadena en el orden legible en pantalla. Sin embargo, la matriz lpGlyphs no suele ser necesaria. (Hebreo puede tener glifos adicionales, si la fuente es una fuente TrueType/Open).

En el caso de idiomas como tailandés o árabe, en el que GetFontLanguageInfo devuelve la marca GCP_GLYPHSHAPE, lpOutString proporcionará el orden legible de la cadena pasada a GetCharacterPlacement, pero los valores seguirán siendo los caracteres sin formato. Para una visualización adecuada, se debe usar la matriz lpGlyphs .

Nota

El encabezado wingdi.h define GCP_RESULTS como un alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutro de codificación con código que no es neutral de codificación puede provocar discrepancias que dan lugar a errores de compilación o en tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado wingdi.h (incluye Windows.h)

Consulte también

ExtTextOut

Estructuras de fuente y texto

Información general sobre fuentes y texto

GetCharacterPlacement

GetFontLanguageInfo