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
);

parameters

[in] string

类型: const WCHAR*

指向宽字符字符串的指针。

重要 对于双向语言(如阿拉伯语),字符串长度不得超过 2046 个字符。
 

[in] length

类型: INT

指定 字符串 数组中的字符数的整数。 如果 字符串 参数指向 以 NULL 结尾的字符串,则可以将此参数设置为 –1。

[in] font

类型: const Font*

指向 Font 对象的指针,该对象指定字体特征 (要应用于字符串的字体) 的系列名称、大小和样式。

[in, ref] layoutRect

类型: const Rectf

对绑定字符串的矩形的引用。

[in] stringFormat

类型: const StringFormat*

指向 StringFormat 对象的指针,该对象指定字符范围和布局信息,例如对齐、剪裁、制表位等。

[in] regionCount

类型: INT

指定预期接收到 regions 数组中的区域数的整数。 此数字应等于 StringFormat 对象中当前字符范围的数目。

[out] regions

类型: 区域*

指向 接收区域 的区域对象的数组的指针,其中每个对象绑定一个文本范围。

返回值

类型: 状态

如果方法成功,则返回 Ok,这是 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
标头 gdiplusgraphics.h (包括 Gdiplus.h)
Library Gdiplus.lib
DLL Gdiplus.dll

另请参阅

CharacterRange

GetMeasurableCharacterRangeCount

显卡

SetMeasurableCharacterRanges