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 lenguajes, 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 null si no se necesita la cadena de salida. 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 se establece la marca 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 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 de lpGlyphs; Si no se devuelven índices de glifos y se solicita lpOrder, los índices son para lpOutString. Por ejemplo, en este ú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, 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 de lpOrder proporciona las ubicaciones exactas de cada elemento de la cadena original.

lpDx

Puntero a la matriz que recibe las distancias entre las celdas de caracteres adyacentes o se NULL si no se necesitan estas distancias. 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 iésimo carácter 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 del símbolo de intercalación o 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 está 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 icarácter de 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 siguientes valores.

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 de 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 parte de la matriz de 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, tal como 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 GCP_CLASSIN y se proporciona la matriz de 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 se NULL si no se necesita representación de glifos. 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 debe usarse siempre cuando se usa esta matriz 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 requerido en lpGcpResults->lpGlyphs[0]. Si no se requiere ningún máximo, debe establecer este campo en cero.

Para 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 del texto desplazado, puede que esto no sea true. En estos casos, es conveniente forzar que los primeros o los últimos caracteres se forme como formas iniciales o finales. Para ello, de nuevo, la primera ubicación de la lpGlyphs matriz se usa realizando una operación OR del valor de ligadura anterior con los valores GCPGLYPH_LINKBEFORE y/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 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 de . Si se establece el GCP_MAXEXTENT o GCP_JUSTIFY valor, 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, este será el mismo.

Observaciones

Si el lpGlyphs, lpOutStringo ninguno de ellos depende de los resultados de la llamada 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 funcionamiento correcto. (Aunque no es necesario, todavía se pueden usar. Si se usa la matriz de 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 las fuentes para idiomas como el hebreo, que do tienen reordenamiento, pero normalmente no tienen formas de glifo adicionales, se deben usar lpOutString. Esto proporcionará la cadena en el orden legible de la pantalla. Sin embargo, la matriz de lpGlyphs no suele ser necesaria. (El hebreo puede tener glifos adicionales, si la fuente es una fuente TrueType/Open).

En el caso de idiomas como tailandés o árabe, en los que GetFontLanguageInfo devuelve la marca GCP_GLYPHSHAPE, el 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 deben usar los lpGlyphs matriz.

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 Conventions for Function Prototypes.

Requisitos

Requisito Valor
cliente mínimo admitido Windows 2000 Professional [solo aplicaciones de escritorio]
servidor mínimo admitido Windows 2000 Server [solo aplicaciones de escritorio]
encabezado de wingdi.h (incluya Windows.h)

Consulte también

extTextOut

estructuras de fuente y texto

de información general de fuentes y texto de

GetCharacterPlacement

GetFontLanguageInfo