次の方法で共有


テキストの書式設定 (GDI+)

テキストに特別な書式を適用するには、StringFormat オブジェクトを初期化し、そのオブジェクトのアドレスを Graphics クラスの DrawString メソッドに渡します。

四角形に書式設定されたテキストを描画するには、 GraphicsFontFamilyFontRectFStringFormatBrush オブジェクトが必要です。

テキストの配置

次の例では、四角形にテキストを描画します。 テキストの各行は中央揃え (左右)、テキストブロック全体が四角形の中央 (上から下) に配置されます。

WCHAR string[] = 
   L"Use StringFormat and RectF objects to center text in a rectangle.";
                       
FontFamily   fontFamily(L"Arial");
Font         font(&fontFamily, 12, FontStyleBold, UnitPoint);
RectF        rectF(30.0f, 10.0f, 120.0f, 140.0f);
StringFormat stringFormat;
SolidBrush   solidBrush(Color(255, 0, 0, 255));

// Center-justify each line of text.
stringFormat.SetAlignment(StringAlignmentCenter);

// Center the block of text (top to bottom) in the rectangle.
stringFormat.SetLineAlignment(StringAlignmentCenter);

graphics.DrawString(string, -1, &font, rectF, &stringFormat, &solidBrush);

Pen pen(Color(255, 0, 0, 0));
graphics.DrawRectangle(&pen, rectF);
            

次の図は、四角形と中央揃えのテキストを示しています。

6 行のテキストを含む四角形を含むウィンドウのスクリーン ショット (水平方向に中央揃え)

上記のコードは 、StringFormat オブジェクトの StringFormat::SetAlignment と StringFormat::SetLineAlignment の 2 つのメソッド 呼び出します。 StringFormat::SetAlignment の呼び出しは、テキストの各行が、DrawString メソッドに渡される 3 番目の引数によって指定された四角形の中央に配置されることを指定します。 StringFormat::SetLineAlignment の呼び出しは、テキストブロックが四角形の中央 (上から下) であることを指定します。

値 StringAlignmentCenter は、Gdiplusenums.h で宣言されている StringAlignment 列挙の要素です。

タブ位置の設定

文字列のタブ位置を設定するには、StringFormat オブジェクトの StringFormat::SetTabStops メソッドを呼び出し、その StringFormat オブジェクトのアドレスを Graphics クラスの DrawString メソッドに渡します。

次の例では、タブ ストップを 150、250、350 に設定します。 次に、コードに名前とテスト スコアのタブ付きリストが表示されます。

WCHAR string[150] = 
   L"Name\tTest 1\tTest 2\tTest 3\n";

StringCchCatW(string, 150, L"Joe\t95\t88\t91\n");
StringCchCatW(string, 150, L"Mary\t98\t84\t90\n");
StringCchCatW(string, 150, L"Sam\t42\t76\t98\n");
StringCchCatW(string, 150, L"Jane\t65\t73\t92\n");
                       
FontFamily   fontFamily(L"Courier New");
Font         font(&fontFamily, 12, FontStyleRegular, UnitPoint);
RectF        rectF(10.0f, 10.0f, 450.0f, 100.0f);
StringFormat stringFormat;
SolidBrush   solidBrush(Color(255, 0, 0, 255));
REAL         tabs[] = {150.0f, 100.0f, 100.0f};

stringFormat.SetTabStops(0.0f, 3, tabs);

graphics.DrawString(string, -1, &font, rectF, &stringFormat, &solidBrush);

Pen pen(Color(255, 0, 0, 0));
graphics.DrawRectangle(&pen, rectF);
            

次の図は、タブ付きのテキストを示しています。

4 列のテキストを含む四角形の図。各列は左揃えです

上記のコードは、 StringFormat::SetTabStops メソッドに 3 つの引数を渡します。 3 番目の引数は、タブ オフセットを含む配列のアドレスです。 2 番目の引数は、その配列に 3 つのオフセットがあることを示します。 StringFormat::SetTabStops に渡される最初の引数は 0 です。これは、配列内の最初のオフセットが、外接する四角形の左端である位置 0 から測定されることを示します。

縦書きテキストの描画

StringFormat オブジェクトを使用すると、テキストを水平方向ではなく垂直方向に描画するように指定できます。

次の例では、StringFormat オブジェクトの StringFormat::SetFormatFlags メソッドに値 StringFormatFlagsDirectionVertical渡します。 その StringFormat オブジェクトのアドレスは、Graphics クラスの DrawString メソッドに渡されます。 値 StringFormatFlagsDirectionVertical は、Gdiplusenums.h で宣言されている StringFormatFlags 列挙の要素です。

WCHAR string[] = L"Vertical text";
                     
FontFamily   fontFamily(L"Lucida Console");
Font         font(&fontFamily, 14, FontStyleRegular, UnitPoint);
PointF       pointF(40.0f, 10.0f);
StringFormat stringFormat;
SolidBrush   solidBrush(Color(255, 0, 0, 255));

stringFormat.SetFormatFlags(StringFormatFlagsDirectionVertical);

graphics.DrawString(string, -1, &font, pointF, &stringFormat, &solidBrush);
            

次の図は、縦書きのテキストを示しています。

時計回りに 90 度回転したテキストを含むウィンドウを示す図