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

種類: const Font*

文字列に適用するフォントの特性 (フォントのファミリ名、サイズ、およびスタイル) を指定する Font オブジェクトへのポインター。

[in, ref] layoutRect

型: const Rectf

文字列をバインドする四角形への参照。

[in] stringFormat

型: const StringFormat*

文字範囲とレイアウト情報 (配置、トリミング、タブ位置など) を指定する StringFormat オブジェクトへのポインター。

[in] regionCount

型: INT

リージョン配列に受信する必要がある領域の数を指定する 整数 。 この数値は、 StringFormat オブジェクト内の現在の文字範囲の数と等しい必要があります。

[out] regions

種類: リージョン*

領域を受け取る Region オブジェクトの配列へのポインター。それぞれがテキストの範囲をバインドします。

戻り値

種類: 状態

メソッドが成功した場合は、 Status 列挙の要素である Ok を返します。

メソッドが失敗した場合は、 Status 列挙体の他の要素のいずれかを返します。

解説

文字範囲は、文字列内の文字位置の範囲です。 文字範囲で指定された文字のグループによって占有されるディスプレイの領域は、境界領域です。 文字範囲は SetMeasurableCharacterRanges によって設定されます。 現在設定されている範囲の数は、 GetMeasurableCharacterRangeCount を呼び出すことによって決定できます。 この数は、 MeasureCharacterRanges メソッドによって取得される領域の数でもあります。

次の例では、文字列内の文字位置の 3 つの範囲を定義し、それらの範囲を StringFormat オブジェクトに設定します。 次に、 MeasureCharacterRanges メソッドを使用して、範囲で指定された文字によって占有される表示の 3 つの領域を取得します。 これは、文字列のレイアウトに応じて領域がどのように変化するかを示すために、3 つの異なるレイアウト四角形に対して行われます。 また、この 3 回目の繰り返しでは、測定される領域に末尾のスペースが含まれるように、文字列書式フラグが変更されます。

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