Compartir a través de


Método Graphics::MeasureCharacterRanges (gdiplusgraphics.h)

El método Graphics::MeasureCharacterRanges obtiene un conjunto de regiones cada una de las cuales enlaza un intervalo de posiciones de caracteres dentro de una cadena.

Sintaxis

Status MeasureCharacterRanges(
  [in]      const WCHAR        *string,
  [in]      INT                length,
  [in]      const Font         *font,
  [in, ref] const RectF &      layoutRect,
  [in]      const StringFormat *stringFormat,
  [in]      INT                regionCount,
  [out]     Region             *regions
);

Parámetros

[in] string

Tipo: const WCHAR*

Puntero a una cadena de caracteres anchos.

Importante En el caso de los idiomas bidireccionales, como el árabe, la longitud de la cadena no debe superar los 2046 caracteres.
 

[in] length

Tipo: INT

Entero que especifica el número de caracteres de la matriz de cadenas . Si el parámetro de cadena apunta a una cadena terminada en NULL, este parámetro se puede establecer en –1.

[in] font

Tipo: const Font*

Puntero a un objeto Font que especifica las características de fuente (el nombre de familia, el tamaño y el estilo de la fuente) que se aplicarán a la cadena.

[in, ref] layoutRect

Tipo: const Rectf

Referencia a un rectángulo que enlaza la cadena.

[in] stringFormat

Tipo: const StringFormat*

Puntero a un objeto StringFormat que especifica los intervalos de caracteres y la información de diseño, como alineación, recorte, tabulaciones, etc.

[in] regionCount

Tipo: INT

Entero que especifica el número de regiones que se espera que se reciban en la matriz de regiones . Este número debe ser igual al número de intervalos de caracteres que se encuentran actualmente en el objeto StringFormat .

[out] regions

Tipo: Región*

Puntero a una matriz de objetos Region que recibe las regiones, cada una de las cuales enlaza un intervalo de texto.

Valor devuelto

Tipo: Estado

Si el método se ejecuta correctamente, devuelve Ok, que es un elemento de la enumeración Status .

Si se produce un error en el método, devuelve uno de los otros elementos de la enumeración Status .

Comentarios

Un intervalo de caracteres es un intervalo de posiciones de caracteres dentro de una cadena de texto. El área de la pantalla ocupada por un grupo de caracteres especificado por el intervalo de caracteres es la región delimitadora. SetMeasurableCharacterRanges establece un intervalo de caracteres. El número de intervalos que se establecen actualmente se puede determinar llamando a GetMeasurableCharacterRangeCount. Este número también es el número de regiones que se espera que obtenga el método MeasureCharacterRanges .

Ejemplos

En el ejemplo siguiente se definen tres intervalos de posiciones de caracteres dentro de una cadena y se establecen esos intervalos en un objeto StringFormat . A continuación, el método MeasureCharacterRanges se usa para obtener las tres regiones de la pantalla ocupadas por los caracteres especificados por los intervalos. Esto se hace para tres rectángulos de diseño diferentes para mostrar cómo cambian las regiones según el diseño de la cadena. Además, en la tercera repetición de esto, se cambian las marcas de formato de cadena para que las regiones medidas incluyan espacios finales.

VOID MeasureCharRanges(HDC hdc)
{
   Graphics graphics(hdc);

   // Brushes and pens used for drawing and painting
   SolidBrush blueBrush(Color(255, 0, 0, 255));
   SolidBrush redBrush(Color(100, 255, 0, 0));
   Pen        blackPen(Color(255, 0, 0, 0));

   // Layout rectangles used for drawing strings
   RectF   layoutRect_A(20.0f, 20.0f, 130.0f, 130.0f);
   RectF   layoutRect_B(160.0f, 20.0f, 165.0f, 130.0f);
   RectF   layoutRect_C(335.0f, 20.0f, 165.0f, 130.0f);

   // Three different ranges of character positions within the string
   CharacterRange charRanges[3] = { CharacterRange(3, 5),
                                    CharacterRange(15, 2),
                                    CharacterRange(30, 15), };

   // Font and string format to apply to string when drawing
   Font         myFont(L"Times New Roman", 16.0f);
   StringFormat strFormat;

    // Other variables
   Region* pCharRangeRegions; // pointer to CharacterRange regions
   short   i;                 // loop counter
   INT     count;             // number of character ranges set
   WCHAR   string[] = L"The quick, brown fox easily jumps over the lazy dog.";


   // Set three ranges of character positions.
   strFormat.SetMeasurableCharacterRanges(3, charRanges);

   // Get the number of ranges that have been set, and allocate memory to 
   // store the regions that correspond to the ranges.
   count = strFormat.GetMeasurableCharacterRangeCount();
   pCharRangeRegions = new Region[count];

   // Get the regions that correspond to the ranges within the string when
   // layout rectangle A is used. Then draw the string, and show the regions.
   graphics.MeasureCharacterRanges(string, -1,
      &myFont, layoutRect_A, &strFormat, count, pCharRangeRegions);
   graphics.DrawString(string, -1,
      &myFont, layoutRect_A, &strFormat, &blueBrush);
   graphics.DrawRectangle(&blackPen, layoutRect_A);
   for ( i = 0; i < count; i++)
   {
      graphics.FillRegion(&redBrush, pCharRangeRegions + i);
   }

   // Get the regions that correspond to the ranges within the string when
   // layout rectangle B is used. Then draw the string, and show the regions.
   graphics.MeasureCharacterRanges(string, -1,
      &myFont, layoutRect_B, &strFormat, count, pCharRangeRegions);
   graphics.DrawString(string, -1,
      &myFont, layoutRect_B, &strFormat, &blueBrush);
   graphics.DrawRectangle(&blackPen, layoutRect_B);
   for ( i = 0; i < count; i++)
   {
      graphics.FillRegion(&redBrush, pCharRangeRegions + i);
   }

   // Get the regions that correspond to the ranges within the string when
   // layout rectangle C is used. Set trailing spaces to be included in the
   // regions. Then draw the string, and show the regions.
   strFormat.SetFormatFlags(StringFormatFlagsMeasureTrailingSpaces);
   graphics.MeasureCharacterRanges(string, -1,
      &myFont, layoutRect_C, &strFormat, count, pCharRangeRegions);
   graphics.DrawString(string, -1,
      &myFont, layoutRect_C, &strFormat, &blueBrush);
   graphics.DrawRectangle(&blackPen, layoutRect_C);
   for ( i = 0; i < count; i++)
   {
      graphics.FillRegion(&redBrush, pCharRangeRegions + i);
   }
   // Delete memory for the range regions.
   delete [] pCharRangeRegions;
}

Requisitos

   
Cliente mínimo compatible Windows XP, Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado gdiplusgraphics.h (include Gdiplus.h)
Library Gdiplus.lib
Archivo DLL Gdiplus.dll

Consulte también

CharacterRange

GetMeasurableCharacterRangeCount

Elementos gráficos

SetMeasurableCharacterRanges