« 最新版リリース | トップページ | システムロケール、ユーザーロケールetc »

2006年12月31日 (日)

GetFontUnicodeRanges

Win32APIのGetFontUnicodeRanges。これで、第一引数で指定されるデバイスコンテキスに設定されたフォントでどの文字のグリフを持っているか調べることができるんですが、フォントリンク機能は考慮しませんね。他のGDI関数TextOutやExtTextOutなどでは、指定したフォントがグリフを持っていなくても、リンク設定されたフォントのグリフを自動的に使用し表示します。このAPIの第2引数に渡す構造体のサイズは、GetFontUnicodeRanges(DC, null)で呼び出せば、必要なサイズが返されます。このサイズは構造体全体のサイズです。

後、GetCharABCWidthsWとGetTextExtentPoint32W。どれも文字というか、グリフの幅が返されるんだけど、実際文字列を描画するために、ExtTextOutを呼び出すと、カーニングや文字の合成をGDIのレンダリングエンジンが行ってくれるが、GetTextExtentPoint32Wはそれらの処理が行われた後の幅のイメージ。GetCharABCWidthsWは行われる前の幅をあらわすイメージ。つまり、一つのUnicodeコードポイントで表される文字についても上記のAPIが返す幅は異なる。例えば、U+0302あたりの合成文字のダイアクリティカルマーク。これらは基底文字と一緒に表示されることを考慮?してGetTextExtentPoint32Wは0の幅を返す(WindowsXP以降?)で、前に基底文字がない単独のダイアクリティカルマークをプログラムによって作り出したが、表示上は幅があって見える。が、選択できない。ははは。というか、最近Unicodeについて勉強してるが、難しい。

« 最新版リリース | トップページ | システムロケール、ユーザーロケールetc »

Windows」カテゴリの記事

コメント

コメントを書く

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

トラックバック

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

この記事へのトラックバック一覧です: GetFontUnicodeRanges:

« 最新版リリース | トップページ | システムロケール、ユーザーロケールetc »

自作ソフトウェア

無料ブログはココログ

メモ