Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Från och med Windows 8 har DirectWrite ett antal nya API:er som gör att du kan använda lodrät text i dina appar.
Rita lodrät text
Du kan rita lodrät text med Direct2D med hjälp av metoderna DrawTextLayout. Om du vill rita texten lodrätt skickar du DWRITE_READING_DIRECTION_TOP_TO_BOTTOM till metoden IDWriteTextFormat::SetReadingDirection och DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT till metoden IDWriteTextFormatSetFlowDirection. Sedan kan du skapa och rita ett lodrätt IDWriteTextLayout objekt.
Analysera teckenorientering
Varje tecken har en önskad teckenorientering eller riktningen som tecknet ska vara orienterad i valfri riktningslayout. I den traditionella vågräta layouten är till exempel både den latinska texten och den kinesiska texten lodräta. Å andra sidan förblir den kinesiska texten upprätt i en lodrät layout och den latinska texten roteras 90 grader. Den här skillnaden i orientering visas i exemplet här.
Du måste implementera IDWriteTextAnalysisSink1 och IDWriteTextAnalysisSource1 gränssnitt för att fastställa orienteringen för den text du har. Källan och mottagaren tar in glyph-körningarna och låter dig kontrollera om de är orienterade vertikalt eller inte.
När du har implementerat källan och mottagaren anropar du metoden AnalyzeVerticalGlyphOrientation. I exempelbilden returnerar den här funktionen tre körningar: "English", "中国" och "English".
Gå från tecken till tecken
Nu när du vet att körningen innehåller lodräta glyfer måste du få åtkomst till dessa glyfer. I exemplet hittills finns det tre körningar: en med lodräta glyfer och två utan. Om du vill övergå från tecken till tecken anropar du GetGlyphIndices. Den här metoden returnerar motsvarande glyphindex för tecknen i exemplet. Eftersom metoden AnalyzeVerticalGlyphOrientation returnerar en körning med lodräta glyfer måste du anropa GetVerticalGlyphVariants, som returnerar lodrätt orienterade glyph-ID:n i stället för de aktuella glyph-ID:n.
Rita text lodrätt
Slutligen måste du lägga ut och rita texten. Eftersom du ritar texten lodrätt måste du få mer information så att den latinska texten ritas korrekt. Om du ritar all text längs den centrala baslinjen verkar den latinska texten flyta mitt på linjen. Du behöver åtkomst till både den centrala och den romerska baslinjen för att justera texten korrekt. Använd metoden IDWriteTextAnalyzer1::GetBaseline för att hämta de numeriska värdena för de baslinjer som du anger. Du kan subtrahera den romerska baslinjen från den centrala baslinjen för att hämta förskjutningen mellan de två.
Med all den här informationen kan du rita texten på skärmen. Anropa först metoden GetGlyphOrientationTransform med resultatet från IDWriteTextAnalysisSink1 och IDWriteTextAnalysisSource1 objekt.
Om du använder Direct2D- måste du också ange världsomformningen på Direct2D-återgivningsmålet för vertikal rendering.
Anropa slutligen DrawGlyphRun tre gånger, en gång i varje textblock. På de två textblocken som är på engelska måste du tillämpa den förskjutning som vi beräknade mellan de romerska och centrala baslinjerna.
Nu ritas texten i appen lodrätt, med rätt glyph-orientering.