Megosztás a következőn keresztül:


Függőleges szöveg

A Windows 8-tól kezdve DirectWrite számos új API-val rendelkezik, amelyek lehetővé teszik a függőleges szöveg használatát az alkalmazásokban.

Függőleges szöveg rajzolás

A Direct2D-vel függőleges szöveget rajzolhat a DrawTextLayout metódusokkal. Ha függőlegesen szeretné rajzolni a szöveget, adja át DWRITE_READING_DIRECTION_TOP_TO_BOTTOM az IDWriteTextFormat::SetReadingDirection metódusnak, és DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT az IDWriteTextFormatSetFlowDirection metódusnak. Ezután létrehozhat és rajzolhat egy függőleges IDWriteTextLayout objektumot.

Karakter tájolásának elemzése

Minden karakternek van egy előnyben részesített karakter-tájolása, vagy az irány, amelyet a karakternek bármilyen irányban el kell helyeznie. A hagyományos vízszintes elrendezésben például a latin és a kínai szöveg is függőlegesen orientált. Másrészt függőleges elrendezésben a kínai szöveg függőlegesen marad, a latin szöveg pedig 90 fokban forog. Ez a tájolásbeli különbség az alábbi példában látható.

az angol és a kínai szöveg képét vízszintes és függőleges elrendezésben.

A szöveg tájolásának meghatározásához implementálnia kell az IDWriteTextAnalysisSink1 és IDWriteTextAnalysisSource1 interfészeket. A forrás és a fogadó veszi a glyph fut, és lehetővé teszi, hogy ellenőrizze, hogy azok függőlegesen vagy nem.

A forrás és a fogadó implementálása után meghívja az AnalyzeVerticalGlyphOrientation metódust. A példaképben ez a függvény 3 futtatásból áll: "Angol", "中国" és "Angol".

Ugrás karakterekről karakterjelekre

Most, hogy tudja, hogy a futtatás függőleges karakterjeleket tartalmaz, hozzá kell férnie ezekhez a karakterjelekhez. Az eddigi példában 3 futtatás van: egy függőleges karakterjelekkel és kettő anélkül. A karakterekről a karakterjelekre való áttéréshez GetGlyphIndiceshívhatja meg. Ez a metódus a példában szereplő karakterek megfelelő karakterindexeit adja vissza. Mivel az AnalyzeVerticalGlyphOrientation metódus függőleges karakterjelekkel rendelkező futtatást ad vissza, GetVerticalGlyphVariantskell meghívnia, amely az aktuális karakterazonosítók helyett a függőlegesen orientált karakterjel-azonosítókat adja vissza.

Függőlegesen rajzolt szöveg

Végül el kell helyeznie és meg kell rajzolnia a szöveget. Mivel függőlegesen rajzolja a szöveget, további információkat kell beszereznie, hogy a latin szöveg helyesen legyen rajzolva. Ha az összes szöveget a központi alapkonfiguráció mentén rajzolja meg, úgy tűnik, hogy a latin szöveg a sor közepén lebeg. A szöveg helyes igazításához a központi és a római alapkonfigurációhoz is hozzá kell férnie. Használja az IDWriteTextAnalyzer1::GetBaseline metódust a megadott alaptervek numerikus értékeinek lekéréséhez. A római alapkonfigurációt kivonhatja a központi alapkonfigurációból a kettő közötti eltolás lekéréséhez.

Ezzel az információval megrajzolhatja a szöveget a képernyőn. Először hívja meg a GetGlyphOrientationTransform metódust az IDWriteTextAnalysisSink1 és IDWriteTextAnalysisSource1 objektumok eredményeivel.

Ha Direct2D- használ, a világátalakítást is be kell állítania a Direct2D renderelési célon a függőleges rendereléshez.

Végül hívja meg DrawGlyphRun háromszor, egyszer az egyes szövegblokkokon. A két angol nyelvű szövegblokkon a római és a központi alapkonfiguráció között kiszámított eltolást kell alkalmaznia.

Most az alkalmazásban lévő szöveg függőlegesen lesz rajzolva, a megfelelő tájolással.