FPSを作ってみる@wiki
Tips
最終更新:
slice
-
view
ここに書いてあるTipsはWindowsXP(SP3)でしか確認していない
GetGlyphOutlineでサロゲートペア(Surrogate Pair,代用対)の文字を取得
大前提として取得したい文字に対応したフォントが必要(例:メイリオ)
引数のUINT uCharに渡すのは確かにUnicode文字インデックスであるが,どうも0xffffより上は無視されてしまう(豆腐になる)模様.
GetGlyphIndices()を使ってグリフインデックス(フォントファイル中での文字インデックス)に変換しようとしても該当文字無しと返される.
なので別の関数でグリフインデックスを求める.具体的にはGetCharacterPlacement()である.
サロゲートペアの文字が必ず1つ,wchar_t*型のstrに入ってると仮定すれば
GetGlyphIndices()を使ってグリフインデックス(フォントファイル中での文字インデックス)に変換しようとしても該当文字無しと返される.
なので別の関数でグリフインデックスを求める.具体的にはGetCharacterPlacement()である.
サロゲートペアの文字が必ず1つ,wchar_t*型のstrに入ってると仮定すれば
wchar_t* str={0xd867, 0xde3d}
wchar_t lpgBuff[2];
GCP_RESULTS gcp = {};
gcp.lStructSize = sizeof(gcp);
gcp.lpGlyphs = lpgBuff;
gcp.nGlyphs = 2;
GetCharacterPlacement(hDC, str, gcp.nGlyphs, 0, &gcp, GCP_GLYPHSHAPE);
のようになる.
gcp.lpGlyphs[0]にグリフインデックスが入っているのでこれを使い
gcp.lpGlyphs[0]にグリフインデックスが入っているのでこれを使い
GLYPHMETRICS gm;
MAT2 m2 = {{0,1},{0,0},{0,0},{0,1}};
DWORD size = GetGlyphOutline(hDC, gcp.lpGlyphs[0], GGO_GLYPH_INDEX, &gm, 0, NULL, &m2);
のようにすれば良い.GGO_GLYPH_INDEXを忘れずに.
ちなみに0xD867 0xDE3DはUTF-32の0x29E3Dであり,魚のホッケ
ちなみに0xD867 0xDE3DはUTF-32の0x29E3Dであり,魚のホッケ