Поделиться через


Метод 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*

Указатель на строку с расширенными символами.

Важно Для двунаправленных языков, таких как арабский, длина строки не должна превышать 2046 символов.
 

[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

См. также раздел

CharacterRange

GetMeasurableCharacterRangeCount

Графика

SetMeasurableCharacterRanges