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
種類: 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 |