共用方式為


複雜腳本

雖然上述所討論的函式適用於許多語言,但可能無法處理複雜腳本的需求。 複雜腳本 是不會以簡單方式轉譯列印表表表表體的語言。 例如,複雜的腳本可能會允許雙向轉譯、圖像的內容成形,或結合字元。 由於這些特殊需求,文字輸出的控制必須非常靈活。

顯示 text TextOutExtTextOutTabbedTextOutDrawTextGetTextExtentExPoint 的函式已擴充以支持複雜的腳本。 一般而言,此支援對應用程式而言是透明的。 不過,應用程式應該將字元儲存在緩衝區中,並一次顯示整行文字,讓複雜的腳本成形模組可以使用內容來重新排序並正確產生字元。 此外,由於字元的寬度可能會因內容而異,因此應用程式應該使用 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);

若要一次切換這兩個屬性,請執行下列語句,然後呼叫 SetTextAlignExtTextOut,如先前所示:

lAlign = TA_RIGHT^TA_RTLREADING;  //pre-inline !

您也可以使用 Uniscribe 處理複雜的腳本。 Uniscribe 是一組函式,允許複雜腳本的精細控制程度。 如需詳細資訊,請參閱 Uniscribe處理複雜腳本