Bagikan melalui


Teks Pemformatan (GDI+)

Untuk menerapkan pemformatan khusus ke teks, inisialisasi objek StringFormat dan teruskan alamat objek tersebut ke metode DrawString kelas Grafis.

Untuk menggambar teks yang diformat dalam persegi panjang, Anda memerlukan objek Grafis, FontFamily, Font, RectF, StringFormat, dan Brush .

Meratakan Teks

Contoh berikut menggambar teks dalam persegi panjang. Setiap baris teks di tengah (sisi ke sisi), dan seluruh blok teks di tengah (atas ke bawah) dalam persegi panjang.

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);
            

Ilustrasi berikut ini memperlihatkan persegi panjang dan teks tengah.

cuplikan layar jendela yang berisi persegi panjang, yang berisi enam baris teks, di tengah secara horizontal

Kode sebelumnya memanggil dua metode objek StringFormat : StringFormat::SetAlignment dan StringFormat::SetLineAlignment. Panggilan ke StringFormat::SetAlignment menentukan bahwa setiap baris teks dipusatkan di persegi panjang yang diberikan oleh argumen ketiga yang diteruskan ke metode DrawString . Panggilan ke StringFormat::SetLineAlignment menentukan bahwa blok teks di tengah (atas ke bawah) dalam persegi.

Nilai StringAlignmentCenter adalah elemen enumerasi StringAlignment , yang dideklarasikan dalam Gdiplusenums.h.

Pengaturan Pemberhentian Tab

Anda dapat mengatur perhentian tab untuk teks dengan memanggil metode StringFormat::SetTabStops dari objek StringFormat lalu meneruskan alamat objek StringFormat tersebut ke metode DrawString kelas Grafis .

Contoh berikut mengatur tab berhenti pada 150, 250, dan 350. Kemudian kode menampilkan daftar nama bertab dan skor pengujian.

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);
            

Ilustrasi berikut ini memperlihatkan teks bertab.

ilustrasi persegi panjang yang berisi empat kolom teks; setiap kolom diratakan kiri

Kode sebelumnya meneruskan tiga argumen ke metode StringFormat::SetTabStops . Argumen ketiga adalah alamat array yang berisi offset tab. Argumen kedua menunjukkan bahwa ada tiga offset dalam array tersebut. Argumen pertama yang diteruskan ke StringFormat::SetTabStops adalah 0, yang menunjukkan bahwa offset pertama dalam array diukur dari posisi 0, tepi kiri persegi panjang pembatas.

Menggambar Teks Vertikal

Anda bisa menggunakan objek StringFormat untuk menentukan bahwa teks digambar secara vertikal daripada horizontal.

Contoh berikut meneruskan nilai StringFormatFlagsDirectionVertical ke metode StringFormat::SetFormatFlags dari objek StringFormat . Alamat objek StringFormat tersebut diteruskan ke metode DrawString dari kelas Grafis . Nilai StringFormatFlagsDirectionVertical adalah elemen enumerasi StringFormatFlags , yang dideklarasikan dalam 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);
            

Ilustrasi berikut ini memperlihatkan teks vertikal.

ilustrasi memperlihatkan jendela yang berisi teks yang diputar 90 derajat searah jajar