Bagikan melalui


Render menggunakan Direct2D

Direct2D menyediakan metode untuk menyajikan teks dengan pemformatan yang dijelaskan hanya oleh IDWriteTextFormat atau IDWriteTextLayout ke permukaan Direct2D.

Perenderan Teks Menggunakan IDWriteTextFormat

Untuk merender string menggunakan objek IDWriteTextFormat untuk menjelaskan pemformatan untuk seluruh string, gunakan metode ID2D1RenderTarget::DrawText yang disediakan oleh Direct2D.

  1. Tentukan area untuk tata letak teks dengan mengambil dimensi area penyajian, dan buat Direct2D persegi panjang yang memiliki dimensi yang sama.

    D2D1_RECT_F layoutRect = D2D1::RectF(
        static_cast<FLOAT>(rc.left) / dpiScaleX_,
        static_cast<FLOAT>(rc.top) / dpiScaleY_,
        static_cast<FLOAT>(rc.right - rc.left) / dpiScaleX_,
        static_cast<FLOAT>(rc.bottom - rc.top) / dpiScaleY_
        );
    
    
  2. Gunakan metode ID2D1RenderTarget::DrawText dan objek IDWriteTextFormat untuk merender teks ke layar. Metode ID2D1RenderTarget::DrawText menerima parameter berikut:

    • String yang akan dirender.
    • Penunjuk ke antarmuka IDWriteTextFormat.
    • Persegi panjang tata letak Direct2D .
    • Penunjuk ke antarmuka yang mengekspos ID2D1Brush.
    pRT_->DrawText(
        wszText_,        // The string to render.
        cTextLength_,    // The string's length.
        pTextFormat_,    // The text format.
        layoutRect,       // The region of the window where the text will be rendered.
        pBlackBrush_     // The brush used to draw the text.
        );
    
    

Merendering Objek IDWriteText Tata Letak

Untuk menggambar teks dengan pengaturan tata letak teks yang ditentukan oleh objek IDWriteTextLayout, ubah kode dalam metode MultiformattedText::DrawText untuk menggunakan IDWriteTextLayout::DrawTextLayout.

  1. Declare sebuah variabel D2D1_POINT_2F dan atur agar menjadi titik kiri atas jendela.

    D2D1_POINT_2F origin = D2D1::Point2F(
        static_cast<FLOAT>(rc.left / dpiScaleX_),
        static_cast<FLOAT>(rc.top / dpiScaleY_)
        );
    
    
  2. Menggambar teks ke layar dengan memanggil metode ID2D1RenderTarget::DrawTextLayout dari target render Direct2D dan meneruskannya ke pointer IDWriteTextLayout.

    pRT_->DrawTextLayout(
        origin,
        pTextLayout_,
        pBlackBrush_
        );