Compartir a través de


estructura GCP_RESULTSW (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 . Para algunos idiomas, el primer elemento de las matrices puede contener más información dependiente del idioma.

Sintaxis

typedef struct tagGCP_RESULTSW {
  DWORD  lStructSize;
  LPWSTR lpOutString;
  UINT   *lpOrder;
  int    *lpDx;
  int    *lpCaretPos;
  LPSTR  lpClass;
  LPWSTR lpGlyphs;
  UINT   nGlyphs;
  int    nMaxFit;
} GCP_RESULTSW, *LPGCP_RESULTSW;

Miembros

lStructSize

Tamaño, en bytes, de la estructura.

lpOutString

Puntero al búfer que recibe la cadena de salida o es NULL si no se necesita la cadena de salida. La cadena de salida es una versión de la cadena original que se encuentra 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 se establece la marca de GCP_REORDER o si la cadena original supera la extensión máxima y se establece la marca 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 GCP_REORDER, lo 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 que no son 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 visualización. Para buscar la distancia del carácter i en la cadena original, use la matriz lpOrder como se indica a continuación:


width = lpDx[lpOrder[i]];

lpCaretPos

Puntero a la matriz que recibe los valores de posición del símbolo 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 del símbolo de intercalación del carácter i en 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 terminar 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 lugar 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, al igual que 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 para el 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 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 se requiere reordenación, 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, inter 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 se debe usar 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 ligaduras 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 el á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 de texto desplazado, puede que esto no sea true. En estos casos, es conveniente forzar que los primeros o últimos caracteres se forme como formularios 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 ligadura 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 requerido 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 exactamente a 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 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 de 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 depende de los resultados de la llamada a GetFontLanguageInfo .

En el caso de una fuente para un idioma como inglés, en el que no se devuelve ninguna de las marcas de GCP_DBCS, GCP_REORDER, GCP_GLYPHSHAPE, GCP_LIGATE, GCP_DIACRITIC o GCP_KASHIDA, no se requiere ninguna de las matrices para el correcto funcionamiento. (Aunque no es necesario, todavía se pueden usar. Si se usa la matriz lpOutString , será exactamente la misma que la lpInputString pasada 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 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 neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o 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