_★
けよりなMCで文字化けする理由
デバッグコードを有効にして
FORTUNE ARTERIAL と
けよりなMC の違いを調査。
その結果、けよりなMCでは
CreateFont(もしくはCreateFontIndirect)にて『MSゴシック』を指定している際にLOGFONT構造体のfdwCharSetが0(=ANSI_CHARSET)となっている。
一方、FAでは128(=SHIFTJIS_CHARSET)となっている。
CreateFontは論理フォントを生成してフォントハンドラを返すだけで実際のフォント選択はSelectObjectで行なわれる。
フォント選択は各種条件からペナルティ計算をして選択される。
日本語Windozeの場合であれば『MSゴシック』はデフォルトでインストールされているので、たとえfdwCharSetが0であっても『MSゴシック』が存在するのでペナルティ計算の結果、『MSゴシック』が選択される。
wineの場合、『MSゴシック』はデフォルトでは存在しないがfdwCharSetが128であれば日本語フォントが必要である事は分かるのでペナルティ計算した結果、wineで使える日本語フォントから最適なフォントが選択され、文字化けが発生しない。(当然、日本語フォントが最低1書体インストールされている必要はある)
しかし、fdwCharSetが0だと『MSゴシック』が存在しない場合、日本語フォントであるとの情報が欠落してしまうのでペナルティ計算の結果、日本語フォントが選択されず文字化けしてしまう。
文字化け回避はuser.regにて代替フォントを指定して逃げるというのが一般的だけど、日本語限定と割りきればMS明朝、MSゴシック、MS UIフォントが指定されたらfont.cのCreateFontIndirectW()内で強制的にfdwCharSetを128に書き換えるという技が使えそうだ。
コード的は大したこと無いので、後でやってみる。
まぁ、何だゑろゲ会社の皆様には日本語フォントを使う際にはfdwCharSetを128に設定することを切に願う。
これだけで大抵の文字化けは解消するハズ。