格式化文字 (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);
            

下圖顯示矩形和置中文字。

視窗的螢幕擷取畫面,其中包含一個矩形,其中包含六行文字,水準置中

上述程式碼會呼叫 StringFormat 物件的兩種方法: StringFormat::SetAlignmentStringFormat::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);
            

下圖顯示垂直文字。

此圖顯示包含文字順時針旋轉 90 度之視窗的圖例