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.
[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 |