格式化文字 (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物件的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);
下圖顯示索引標籤式文字。
上述程式碼會將三個引數傳遞至 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);
下圖顯示垂直文字。