0

右から左のテキスト方向で文字を表示することになると、win32 ネイティブの TextOutW 関数について助けを求めたいと思います。基本的に、TextOutW は、テキストに変形や整形などを適用せずに、文字付きのテキストをそのまま表示することを望んでいます。

私が持っているのは、基本的に次のような単純なコード [1] です。

WCHAR text[2] = { 0x5D3, 0x5E9 };
TextOutW(hdc, 100, 100, ( LPCWSTR ) text, 2);

左から右に、最初に 0x5D3 (ד)、次に 0x5E9 (ש) の 2 つの文字を一緒に描画するために使用したものです。私が得るのは反対です - 最初に 0x5E9 が描画され、次に 0x5D3 が描画されます:

確かに、これをオーバーライドする方法はたくさん考えられます。最も簡単なのは、テキストの前に 0x202D [2] 文字を追加することです。しかし、それはハックで一般的に間違っているように思えます。また、たとえば、文字が自動的に結合されるアラビア語のテキストでは役に立ちません (さらに醜い回避策が必要になります)。

この Windows の動作に関する情報はありますか? プログラム内でそれをオフにするにはどうすればよいですか? これは Uniscribe に関連するものですか? (私はそれを使用したことはありませんし、使用するつもりもありません)。

ありがとうございました!

[1] (完全なコードはこちらhttp://karasik.eu.org/misc/rtl.c )。

[2] U+202D (LRO) LEFT-TO-RIGHT OVERRIDE: 次の文字を強い左から右の文字として処理するよう強制します。

4

1 に答える 1

0

ExtTextOut()関数、特にETO_GLYPH_INDEXフラグを見てください。

この動作は Windows に固有のものではないことに注意してください (ただし、Unicode レイアウトの Windows 実装は他のプラットフォームとは少し異なります)。たとえば、特別なロケールを選択するなどして、魔法のようにプログラムを「オフにする」ことはできません。

于 2015-10-15T20:55:46.477 に答える