Метод Graphics::MeasureCharacterRanges (gdiplusgraphics.h)
Метод Graphics::MeasureCharacterRanges получает набор областей, каждая из которых ограничивает диапазон позиций символов в строке.
Синтаксис
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
);
Параметры
[in] string
Тип: const WCHAR*
Указатель на строку с расширенными символами.
[in] length
Тип: INT
Целое число, указывающее количество символов в массиве строк . Если строковый параметр указывает на строку, завершаемую значением NULL, для этого параметра можно задать значение –1.
[in] font
Тип: константный шрифт*
Указатель на объект Font , указывающий характеристики шрифта (имя семейства, размер и стиль шрифта), применяемые к строке.
[in, ref] layoutRect
Тип: const Rectf
Ссылка на прямоугольник, ограничивающий строку.
[in] stringFormat
Тип: const StringFormat*
Указатель на объект StringFormat , указывающий диапазоны символов и сведения о макете, такие как выравнивание, обрезка, позиции табуляции и т. д.
[in] regionCount
Тип: INT
Целое число, указывающее количество регионов, которые должны быть получены в массиве регионов . Это число должно быть равно количеству диапазонов символов, текущих в объекте StringFormat .
[out] regions
Тип: Регион*
Указатель на массив объектов Region , получающих области, каждая из которых ограничивает диапазон текста.
Возвращаемое значение
Тип: Состояние
В случае успешного выполнения метода возвращается ОК, который является элементом перечисления Status .
Если метод завершается сбоем, он возвращает один из других элементов перечисления Status .
Комментарии
Диапазон символов — это диапазон позиций символов в строке текста. Область отображения, занятая группой символов, заданных диапазоном символов, является ограничивающей областью. Диапазон символов задается с помощью SetMeasurableCharacterRanges. Количество заданных в данный момент диапазонов можно определить, вызвав Метод GetMeasurableCharacterRangeCount. Это число также является числом регионов, которые, как ожидается, будут получены методом MeasureCharacterRanges .
Примеры
В следующем примере определяются три диапазона позиций символов в строке и задаются эти диапазоны в объекте StringFormat . Затем метод MeasureCharacterRanges используется для получения трех областей отображения, занятых символами, заданными диапазонами. Это делается для трех разных прямоугольников макета, чтобы показать, как регионы изменяются в соответствии с макетом строки. Кроме того, при третьем повторении флаги формата строк изменяются таким образом, чтобы измеряемые области включали конечные пробелы.
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;
}
Требования
Минимальная версия клиента | Windows XP, Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | gdiplusgraphics.h (включая Gdiplus.h) |
Библиотека | Gdiplus.lib |
DLL | Gdiplus.dll |