Bagikan melalui


Pemformatan dan Tata Letak Teks

DirectWrite menyediakan dua antarmuka untuk memformat teks: IDWriteTextFormat dan IDWriteTextLayout. IDWriteTextFormat hanya menjelaskan format untuk teks dan digunakan dalam kasus ketika seluruh string adalah untuk menjadi ukuran font, gaya, berat, dan sebagainya yang sama. Di sisi lain, IDWriteTextLayout merangkum string teks dan pemformatan untuk rentang string yang ditentukan. Dokumen ini menjelaskan setiap antarmuka dan penggunaannya. Untuk informasi selengkapnya tentang pembuatan dan metode antarmuka ini, lihat halaman referensi IDWriteTextFormat dan IDWriteTextLayout .

Dokumen ini berisi bagian-bagian berikut:

IDWriteTextFormat

Objek IDWriteTextFormat digunakan untuk:

  • Menjelaskan format untuk seluruh string saat penyajian. Untuk merender string dengan beberapa format, gunakan objek IDWriteTextLayout .
  • Tentukan format teks default saat membuat objek IDWriteTextLayout .

Untuk membuat objek IDWriteTextFormat , Anda menggunakan metode IDWriteFactory::CreateTextFormat dan tentukan keluarga font, koleksi font, bobot font, ukuran font (dalam DIP), nama lokal.

Memodifikasi IDWriteTextFormat

Setelah antarmuka IDWriteTextFormat dibuat, beberapa nilai tidak dapat diubah: keluarga font, koleksi, berat, dan ukuran, serta nama lokal. Untuk mengubah nilai-nilai ini, objek IDWriteTextFormat baru harus dibuat.

IDWriteTextLayout memungkinkan Anda mengubah properti di atas tanpa membuat ulang apa pun. IDWriteTextFormat memungkinkan Anda membuat perubahan format yang berlaku untuk seluruh teks, seperti perataan teks. Jika Anda ingin menerapkan pemformatan ke rentang karakter tertentu, Anda harus melakukannya dengan menggunakan IDWriteTextLayout.

IDWriteTextFormat menyediakan metode untuk mengatur perataan teks, arah alur, perhentian tab bertahap, penspasian baris, perataan paragraf, pemangkasan, dan pembungkusan kata. Properti ini dapat diubah kapan saja setelah pembuatan objek IDWriteTextFormat .

IDWriteTextLayout

Antarmuka IDWriteTextLayout , tidak seperti IDWriteTextFormat, mewakili blok teks dan pemformatan terkait. IDWriteTextFormat mewakili informasi pemformatan awal. Contoh berikut menunjukkan cara membuat objek IDWriteTextLayout menggunakan IDWriteFactory::CreateTextLayout.

// Create a text layout using the text format.
if (SUCCEEDED(hr))
{
    RECT rect;
    GetClientRect(hwnd_, &rect); 
    float width  = rect.right  / dpiScaleX_;
    float height = rect.bottom / dpiScaleY_;

    hr = pDWriteFactory_->CreateTextLayout(
        wszText_,      // The string to be laid out and formatted.
        cTextLength_,  // The length of the string.
        pTextFormat_,  // The text format to apply to the string (contains font information, etc).
        width,         // The width of the layout box.
        height,        // The height of the layout box.
        &pTextLayout_  // The IDWriteTextLayout interface pointer.
        );
}

Teks dalam objek IDWriteTextLayout tidak dapat diubah setelah objek dibuat. Untuk mengubah teks, Anda harus menghapus objek yang ada dan membuat objek IDWriteTextLayout baru.

Anda dapat menggunakan IDWriteTextLayout untuk memformat rentang teks yang ditentukan. IDWriteTextLayout juga menyediakan metode untuk mengubah gaya dan berat font, dan menambahkan fitur font OpenType dan menekan pengujian. Untuk informasi selengkapnya dan daftar lengkap metode, lihat halaman referensi IDWriteTextLayout .

Memformat rentang teks

IDWriteTextLayout menyediakan beberapa metode untuk memformat rentang teks. Masing-masing metode ini mengambil struktur DWRITE_TEXT_RANGE sebagai parameter untuk menentukan posisi teks awal dalam string dan panjang rentang untuk diformat. Contoh berikut menunjukkan cara mengatur bobot font rentang teks menjadi tebal.

// Set the font weight to bold for the first 5 letters.
DWRITE_TEXT_RANGE textRange = {0, 5};

if (SUCCEEDED(hr))
{
    hr = pTextLayout_->SetFontWeight(DWRITE_FONT_WEIGHT_BOLD, textRange);
}

Opsi Penyajian

Teks dengan pemformatan yang dijelaskan hanya oleh objek IDWriteTextFormat dapat dirender dengan Direct2D, namun, ada beberapa opsi lagi untuk merender objek IDWriteTextLayout .

String yang dijelaskan oleh objek IDWriteTextLayout dapat dirender menggunakan metode di bawah ini.

  1. Render menggunakan Direct2D.
  2. Merender menggunakan perender teks kustom.
  3. Render ke permukaan GDI.