- ベストアンサー
文字の幅について
こんばんわ。 エディットへSetWindowTextで下記の文字を表示させた時、 文字の幅が異なってしまうのは、なぜでしょうか? 例えば、 「あいうえおかきくけこ」だと日本語10文字なので、 「-」が20個並んでいる幅と同じはず? しかし実際には、 あいうえおかきくけこ -------------------- とずれてしまう。 解る方がいらしたら、ご教授ください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
フォントには「等幅フォント」と「プロポーショナルフォント」があります。 「等幅フォント」は「MSゴシック」「MS明朝」、 「プロポーショナルフォント」は「MSPゴシック」「MSP明朝」、などがあります。 エディットボックスに設定するのであれば、 1.GetFont()で現在の情報を参照し、 2.CFontオブジェクトを作成します。 3.それをSetFont()で設定すればよいのです。 1.で「プロポーショナルフォント」が取得されるので、 2.で1.に対応する「等幅フォント」を作成します。 こんな感じでわかりますかね。
その他の回答 (2)
- HAL007
- ベストアンサー率29% (1751/5869)
今PCで広く使われているフォントは一文字の巾が固定されていません。 字画などで狭くなったり広くなったりしています。 例: WWWWWWWWWW IIIIIIIIII
お礼
回答ありがとうございました。 これで原因がつかめました。
> 文字の幅が異なってしまうのは、なぜでしょうか? 等幅フォントじゃナイからでしょう。 > 「あいうえおかきくけこ」だと日本語10文字なので、 > 「-」が20個並んでいる幅と同じはず? 誤りです。 1バイト文字の幅を2倍したら2バイト文字、ではありません。 いわゆる「横倍角」でも1バイトは1バイトです。
お礼
回答ありがとうございます。 誤った認識をしていました。 デフォルトでは、等幅フォントじゃないんですね・・・
お礼
回答ありがとうございます。 上記手順だとMFCでの手順ですね。 自分は、SDKですが、調べてみたかぎり、 1、GetFontDataでフォントデータを取得。 2、GetDCで対応するフォントを選択。 3、SetWindowTextで文字を表示。 こんな感じで良いですよね。 なんだかフォント情報を取得できそうな関数がけっこうあって?迷ってます。 う~ん、GetFontLanguageInfoなんてのも使えそうです。 考え方として、大変参考になりました。 とりあえず、試してみます。
補足
CreateFontでも適当に書いたら出来ました。 「プロポーショナルフォント」って初めて聞いた言葉でしたが、 調べて理解する事が出来ました。 きっと、自分が書いた以外の方法もあるんでしょうね。 みなさん、ありがとう♪