日本語不可のフォントの場合に日本語文字列を指定された場合、文字化けして表示されないようにするには?


kazu  2006-07-14 10:24:08  No: 62520  IP: 192.*.*.*

最近、フォントに関して勉強しています。

現在、選択したフォントで文字列を画面等に出力するプログラムを作成しています。
この際、日本語不可(Arialフォント)を指定して、かつ、出力する文字列に日本語を使用した場合、出力する文字列が正しく表示されませんでした。(化けて表示される)

CreateFont()の文字セットには、DEFAULT_CHARSETを指定しています。

日本語を使用する場合は、SHIFTJIS_CHARSETを使用すると記載されている
ページもありましたが、フォント選択画面とは別に、内部でフォント一覧を取得する際に、SHIFTJIS_CHARSETを指定するとArialは取得できなかったので、DEFAULT_CHARSETとしていました。

質問1:

  CreateFontの文字セットにSHIFTJIS_CHARSETを指定し、かつ、
  タイプフェイスにArialを指定した場合、どのような動作と
  なるのでしょうか?

質問2:

  正しく日本語を表示させるにはどうしたらよいでしょうか?

編集 削除
dairygoods  2006-07-14 14:47:13  No: 62521  IP: 192.*.*.*

>質問1:

各属性の重みを考慮して、
最も相応しいと思われるものが選ばれます。

(参考)
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200606/06060035.txt

>質問2:

文字セットを SHIFTJIS_CHARSET にします。

編集 削除
kazu  2006-07-18 10:27:27  No: 62522  IP: 192.*.*.*

CreateFont()の文字セットには、SHIFTJIS_CHARSET、タイプフェイス名にはArialを指定しても
環境によっては、日本語が文字化けしたままとなります。
何故、そうなるのか分からない状況ですので、ご教授ください。
XPでは発生せずに、2000 Serverで発生します。
#OSは特に関係ないと思いますが。。

表示する文字列:ユーザ名   ⇒ 出力結果:□□□

現在、CreateFont()には以下の指定を行っています。

   CreateFont(X, ※1
        0,
        0,
        0,
              400,
              TRUE,
              FALSE,
              FALSE,
        SHIFTJIS_CHARSET,
              OUT_DEFAULT_PRECIS,
              CLIP_DEFAULT_PRECIS,
              PROOF_QUALITY,
              FIXED_PITCH | FF_DONTCARE,
              Y); ※2

   ※1 X:任意のサイズ
   ※2 Y:Arial

編集 削除