共用方式為


垂直文字

從 Windows 8 開始,DirectWrite 有許多新的 API,可讓您在應用程式中使用垂直文字。

繪製垂直文字

您可以使用 DrawTextLayout 方法,使用 Direct2D 繪製垂直文字。 若要垂直繪製文字,請將 DWRITE_READING_DIRECTION_TOP_TO_BOTTOM 傳遞至 IDWriteTextFormat::SetReadingDirection 方法,並將 DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT 傳遞給 IDWriteTextFormatSetFlowDirection 方法。 然後,您可以建立並繪製垂直 IDWriteTextLayout 物件。

分析字元方向

每個字元都有慣用的字元方向,或字元在任何方向配置中應方向的方向。 例如,在傳統的水準版面配置中,拉丁文文字和中文文字都是垂直方向。 另一方面,在垂直版面配置中,中文文字保持直立,拉丁文文字旋轉90度。 在此範例中看到方向的差異。

水平和垂直版面配置中英文和中文文字的影像。

若要判斷您擁有的文字方向,您必須實作 IDWriteTextAnalysisSink1,並 IDWriteTextAnalysisSource1 介面。 來源和接收會採用圖像執行,並讓您檢查它們是否垂直方向。

實作來源和接收之後,您會呼叫 AnalyzeVerticalGlyphOrientation 方法。 在範例影像中,此函式會傳回 3 個執行:“English”、“中國”和 “English”。

從字元到字元

既然您知道執行包含垂直圖像,您必須取得這些圖像的存取權。 在到目前為止的範例中,有 3 個執行:一個具有垂直字元,兩個沒有。 若要從字元轉換成字元,您可以呼叫 getGlyphIndices。 這個方法會傳回範例中字元的對應字元索引。 因為 AnalyzeVerticalGlyphOrientation 方法會傳回使用垂直字元執行,因此您必須呼叫 getVerticalGlyphVariants,以取代目前圖像標識符來傳回垂直方向圖像標識符。

垂直繪製文字

最後,您需要配置並繪製文字。 因為您要垂直繪製文字,所以您需要取得一些詳細資訊,以便正確繪製拉丁文字。 如果您沿著中央基準繪製所有文字,則拉丁文字會顯示在行中間浮動。 您需要同時存取中央和羅馬基準,才能正確對齊文字。 使用 IDWriteTextAnalyzer1::GetBaseline 方法來取得您指定的基準數值。 您可以從中央基準減去羅馬基準,以取得兩者之間的位移。

透過這項資訊,您可以在畫面上繪製文字。 首先,使用 IDWriteTextAnalysisSink1IDWriteTextAnalysisSource1 對象的結果,呼叫 getGlyphOrientationTransform 方法。

如果您使用 Direct2D 您也需要在 Direct2D 轉譯目標上設定世界轉換以進行垂直轉譯。

最後,在每個文本塊上呼叫 DrawGlyphRun 三次。 在英文文字的兩個區塊上,您需要套用我們在羅馬和中央基準之間計算的位移。

現在,應用程式中的文字會以正確的圖像方向垂直繪製。