Skrip Kompleks
Meskipun fungsi yang dibahas dalam pekerjaan sebelumnya berfungsi dengan baik untuk banyak bahasa, fungsi tersebut mungkin tidak menangani kebutuhan skrip yang kompleks. skrip Kompleks adalah bahasa yang bentuk cetaknya tidak dirender dengan cara yang sederhana. Misalnya, skrip kompleks dapat memungkinkan penyajian dua arah, pembentukan glyph kontekstual, atau menggabungkan karakter. Karena persyaratan khusus ini, kontrol output teks harus sangat fleksibel.
Fungsi yang menampilkan teks TextOut, ExtTextOut, TabbedTextOut, DrawText, dan GetTextExtentExPoint telah diperluas untuk mendukung skrip kompleks. Secara umum, dukungan ini transparan untuk aplikasi. Namun, aplikasi harus menyimpan karakter dalam buffer dan menampilkan seluruh baris teks sekaligus, sehingga modul pembentukan skrip yang kompleks dapat menggunakan konteks untuk menyusun ulang dan menghasilkan glyph dengan benar. Selain itu, karena lebar glyph dapat bervariasi menurut konteks, aplikasi harus menggunakan GetTextExtentExPoint untuk menentukan panjang garis daripada menggunakan lebar karakter yang di-cache.
Selain itu, aplikasi yang sadar skrip kompleks harus mempertimbangkan untuk menambahkan dukungan untuk urutan membaca kanan-ke-kiri dan keselarasan kanan ke aplikasi mereka. Anda dapat mengalihkan urutan baca atau perataan antara kiri dan kanan dengan kode berikut:
// Save lAlign (this example uses static variables)
static LONG lAlign = TA_LEFT;
// When user toggles alignment (assuming TA_CENTER is not supported).
lAlign = TA_RIGHT;
// When the user toggles reading order.
lAlign = TA_RTLREADING;
// Before calling ExtTextOut, for example, when processing WM_PAINT
SetTextAlign (hDc, lAlign);
Untuk mengalihkan kedua atribut sekaligus, jalankan pernyataan berikut lalu panggil SetTextAlign dan ExtTextOut, seperti yang ditunjukkan sebelumnya:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
Anda juga dapat memproses skrip kompleks dengan Uniscribe. Uniscribe adalah serangkaian fungsi yang memungkinkan tingkat kontrol yang baik untuk skrip yang kompleks. Untuk informasi selengkapnya, lihat Uniscribe dan Memproses Skrip Kompleks.