Karmaşık Betikler
Önceki bölümlerde açıklanan işlevler birçok dil için iyi çalışsa da, karmaşık betiklerin gereksinimleriyle ilgilenmeyebilir. Karmaşık betikler, yazdırılan formu basit bir şekilde işlenmemiş dillerdir. Örneğin, karmaşık bir betik çift yönlü işlemeye, gliflerin bağlamsal olarak şekillendirilmesine veya karakterlerin birleştirilmesine izin verebilir. Bu özel gereksinimler nedeniyle, metin çıktısının denetimi çok esnek olmalıdır.
TextOut , ExtTextOut, TabbedTextOut, DrawTextve GetTextExtentExPoint metin görüntüleyen işlevler, karmaşık betikleri destekleyecek şekilde genişletilmiştir. Genel olarak, bu destek uygulama için saydamdır. Ancak, karmaşık betik şekillendirme modüllerinin bağlamı kullanarak karakterleri doğru bir şekilde sıralamak ve oluşturmak için bağlamı kullanabilmesi için uygulamaların bir arabelleğe karakterleri kaydetmesi ve bir kerede bir metin satırının tamamını görüntülemesi gerekir. Ayrıca, bir karakterin genişliği bağlama göre farklılık gösterebileceğinden, uygulamaların önbelleğe alınmış karakter genişliklerini kullanmak yerine satır uzunluğunu belirlemek için GetTextExtentExPointkullanması gerekir.
Ayrıca, karmaşık betik kullanan uygulamalar, uygulamalarına sağdan sola okuma sırası ve sağ hizalama desteği eklemeyi göz önünde bulundurmalıdır. Okuma sırasını veya hizalamayı sol ve sağ arasında aşağıdaki kodla değiştirebilirsiniz:
// 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);
Her iki özniteliği de aynı anda değiştirmek için aşağıdaki deyimi yürüterek daha önce gösterildiği gibi SetTextAlignve ExtTextOutçağırın:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
Karmaşık betikleri Uniscribe ile de işleyebilirsiniz. Uniscribe, karmaşık betikler için ince düzeyde denetim sağlayan bir işlev kümesidir. Daha fazla bilgi için bkz. Uniscribe ve Processing Complex Scripts.