垂直文字
從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 方法來取得您指定的基準數值。 您可以從中央基準減去 Roman 基準,以取得兩者之間的位移。
透過這項資訊,您可以在畫面上繪製文字。 首先,使用IDWriteTextAnalysisSink1和IDWriteTextAnalysisSource1物件的結果呼叫GetGlyphOrientationTransform方法。
如果您使用 Direct2D ,您也需要在 Direct2D 轉譯目標上設定世界轉換,以進行垂直轉譯。
最後,在每個文字區塊上呼叫 DrawGlyphRun 三次。 在英文的兩個文字區塊上,您必須套用我們在羅馬和中央基準之間計算的位移。
現在,您的應用程式中的文字會以正確的字元方向垂直繪製。