« Unicodeと双方向テキスト | トップページ | そしてUniscribe »

2007年6月 2日 (土)

GetCharacterPlacementの続き

また、GetCharacterPlacementのお話である。前回、双方向テキストをETO_GLYPH_INDEXなしのExtTextOutで出力させてみたが、今回は GetCharacterPlacementを使って同じ結果を出力させてみる。 流れとしては、GetCharacterPlacementでGCP_RESULTS構造体のGlyphsフィールド、Dxフィールドにそれぞれグリフインデックスと隣接する文字セルの原点間の距離が返されるので、それらを使ってExtTextOut(ETO_GLYPH_INDEXつき)で描画してみる。ちなみに、扱うテキストは前回と同じ。フォントはTahoma。

まずは、XP上での実行結果から。

Gcp1

前回の結果と見比べるとわかると思うが、XP上でのETO_GLYPH_INDEXなしのExtTextOutの実行結果と同じである。

次は、2000上での実行結果。

Gcp2

これは、XP上でのETO_GLYPH_INDEXなしのExtTextOutの実行結果と同じである。

やはり2000上で双方向テキストというかコンプレックススクリプトを正しく扱うには、Uniscribeを使うしかないようである。ちなみに、上の二つの図では、GetCharacterPlacementを呼び出すときに、GCP_REORDERと GCP_GLYPHSHAPEフラグを指定した。

ちなみに、この時のCaretPosフィールドで返されるカーソル位置は下の図のとおり。

Gcp3 Gcp4

左がXP上、右が2000上での実行結果。XP上でアラビア語の部分が右から左に表示されたように、カーソル位置のX座標がアラビア語の部分で減少していくのがわかる(82->78->78->61->56->49->49)。ここまでは、問題なさそうである。

次に、テキストを「ABCあいうえおABC」に変えてみる。フォントは同じくTahoma。

まずは、XP上の実行結果から。

Gcp5

次に2000上の実行結果。

Gcp6_1

まず、前にも書いたが、Tahomaは欧文フォントで日本語のグリフが存在しない。また、グリフインデックスを直接処理しているので、フォントリンクなどは働かないので、日本語の部分は文字化けするであろうと想定されたが、XP上ではグリフが存在しない時の代替グリフすら表示されていない。 2000上では矩形のグリフが表示されたが、3つ目と4つ目の矩形だけがくっついて微妙である。

うーん。

« Unicodeと双方向テキスト | トップページ | そしてUniscribe »

Windows」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1497665/39651881

この記事へのトラックバック一覧です: GetCharacterPlacementの続き:

« Unicodeと双方向テキスト | トップページ | そしてUniscribe »

自作ソフトウェア

無料ブログはココログ

メモ