複雜腳本
雖然上述所討論的函式適用於許多語言,但可能無法處理複雜腳本的需求。 複雜腳本 是不會以簡單方式轉譯列印表表表表體的語言。 例如,複雜的腳本可能會允許雙向轉譯、圖像的內容成形,或結合字元。 由於這些特殊需求,文字輸出的控制必須非常靈活。
顯示 text TextOut、ExtTextOut、TabbedTextOut、DrawText及 GetTextExtentExPoint 的函式已擴充以支持複雜的腳本。 一般而言,此支援對應用程式而言是透明的。 不過,應用程式應該將字元儲存在緩衝區中,並一次顯示整行文字,讓複雜的腳本成形模組可以使用內容來重新排序並正確產生字元。 此外,由於字元的寬度可能會因內容而異,因此應用程式應該使用 GetTextExtentExPoint 來判斷行長度,而不是使用快取的字元寬度。
此外,複雜的腳本感知應用程式應該考慮新增對從右至左閱讀順序的支援,以及對其應用程式的靠右對齊。 您可以使用下列程式代碼,在左右之間切換閱讀順序或對齊方式:
// 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);
若要一次切換這兩個屬性,請執行下列語句,然後呼叫 SetTextAlign 和 ExtTextOut,如先前所示:
lAlign = TA_RIGHT^TA_RTLREADING; //pre-inline !
您也可以使用 Uniscribe 處理複雜的腳本。 Uniscribe 是一組函式,允許複雜腳本的精細控制程度。 如需詳細資訊,請參閱 Uniscribe 和 處理複雜腳本。