格式化文字 (GDI+)
若要將特殊格式設定套用至文字,請初始化 StringFormat 物件,並將該對象的地址傳遞至 Graphics 類別的 DrawString 方法。
若要在矩形中繪製格式化文字,您需要 Graphics、FontFamily、Font、RectF、StringFormat及 Brush 物件。
對齊文字
下列範例會在矩形中繪製文字。 每一行文字都會置中(側對邊),而整個文本塊會在矩形中置中(由上至下)。
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);
下圖顯示矩形和置於中央的文字。
上述程式代碼會呼叫 StringFormat 物件的兩種方法:StringFormat::SetAlignment 和 StringFormat::SetLineAlignment。 StringFormat::SetAlignment 的呼叫指定,各行文字都會置中於傳遞至 DrawString 方法的第三個參數所給定的矩形中。 StringFormat::SetLineAlignment 的呼叫 指定文字區塊在矩形中置中(由上至下)。
stringAlignmentCenter值是 stringAlignment 列舉 元素,在 Gdiplusenums.h 中宣告。
設定定位點
您可以透過呼叫 StringFormat::SetTabStops 方法,設定文字的製表位。首先需呼叫 StringFormat 物件,然後將該 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);
下圖顯示索引標籤文字。
上述程式代碼會將三個自變數傳遞給 StringFormat::SetTabStops 方法。 第三個參數是包含製表符偏移量的陣列的位址。 第二個自變數表示該陣列中有三個位移。 傳遞至 StringFormat::SetTabStops 的第一個自變數為 0,表示陣列中的第一個位移是從周框的左邊緣位置 0 測量。
繪製垂直文字
您可以使用 StringFormat 物件來指定文字垂直繪製,而不是水平繪製。
下列範例會將 StringFormatFlagsDirectionVertical 值傳遞給 StringFormat 物件的 StringFormat::SetFormatFlags 方法。 該 StringFormat 物件的位址會傳遞至 Graphics 類別的 DrawString 方法。 值 的 StringFormatFlagsDirectionVertical 字串格式方向垂直 是 StringFormatFlags 列舉中的一個元素,宣告於 Gdiplusenums.h 中。
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);
下圖顯示垂直文字。