ListBox文字列の表示

[戻る]
GG 2007/01/31(水) 08:49:36
お世話になっています.GGです。

ListBoxに文字列を表示していますが、
例、
3行と3列の場合
1  ID17-45          17-45
2  小江川 ID17-22     17-22
3 御正新田 ID17-17   17-17
といことですが、以下のようにやっています、
j=1,2,3;
Name: ID17-45, 小江川 ID17-22, 御正新田 ID17-17
Year: 17
ID  : 17-45, 17-22, 17-17

cstr.Format(_T("%-4d%-20s%-2s-%-4s"), j, Name, Year, ID );

結果は列と列が揃えないこと。
1  ID17-45       17-45
2  小江川 ID17-22     17-22
3 御正新田 ID17-17    17-17

どうしたらいいでしょうか。
よろしくお願いします。

環境:.Net(2002) MFC使用、Win2000

Blue 2007/01/31(水) 08:59:51
プロポーショナルフォントを使っているのであれば(おそらくデフォルトはMSPゴシック)
等幅フォントにしてみてはどうでしょうか?

もしくは、リストボックスコントロールではなく、複数列表示できるリストビューコン
トロールを使うとか。
(CListCtrlでWeb検索すればサンプルはわんさか見つかります。)

GG 2007/01/31(水) 11:50:48
[[解決]]
Blueさん、ご回答ありがとう。
いつもお世話になっています。

確かに、”MS Pゴシック”フォントを使っています、
”MS ゴシック”へ変更して、正常になりました。

ありがとうございました。

PATIO 2007/01/31(水) 13:32:30
正常と言うよりも「MS Pゴシック」なら最初のようになるのが正常ですよ。
「MS ゴシック」にしたらうまくそろいましたと言うのが正解かなぁ。

ある程度横幅に余裕があるのであれば、TABを使って調整する手もあるかと思います。
これだとプロポーショナルフォントでもある程度は揃えられます。

ただ、そういう表示がしたいのであれば、CListCtrlを使った方が良いかなと言う気も
しますね。レポート形式で表示して一行選択を設定すれば同じような外観になりますし。

GG 2007/02/01(木) 14:40:13
[[解決]]
PATIOさん、ご回答ありがとう。

>正常と言うよりも「MS Pゴシック」なら最初のようになるのが正常ですよ。
>「MS ゴシック」にしたらうまくそろいましたと言うのが正解かなぁ。

「MS Pゴシック」がそろえない。
「MS ゴシック」がそろえます。
理由がわかりません。

>ある程度横幅に余裕があるのであれば、TABを使って調整する手もあるかと思います。
>これだとプロポーショナルフォントでもある程度は揃えられます。
横幅に余裕がない。

>ただ、そういう表示がしたいのであれば、CListCtrlを使った方が良いかなと言う気も
>しますね。レポート形式で表示して一行選択を設定すれば同じような外観になりますし。

>(CListCtrlでWeb検索すればサンプルはわんさか見つかります。)
そうですね、これからやってみます。

どうもありがとうございました。

ぬふや 2007/02/01(木) 15:33:27
>「MS Pゴシック」がそろえない。
>「MS ゴシック」がそろえます。
意味がわからない…orz
>理由がわかりません。
どっち?

■何故「MS Pゴシック」では駄目なのか。
「MS Pゴシック」のPは確かプロポーショナルフォントかなんかの略で、
意味としては可変幅。
一文字あたりの横幅を一定にしないことで「i」と「w」などを自然に表示するのが
目的だった筈です。
で、「MS ゴシック」は等間隔。

一文字あたりの幅が違えば文字数で位置あわせが出来ないのも当然です。

■「にしたらうまくそろいましたと言うのが正解かなぁ。」に違和感がある。
「MS Pゴシック」は文字数で横幅を合わせようとする事自体が間違いで、これを
「異常だった」と呼ぶのは正しくない。

Kerry 2007/02/01(木) 15:55:58
> > ある程度横幅に余裕があるのであれば、TABを使って調整する手もあるかと
> > 思います。
> > これだとプロポーショナルフォントでもある程度は揃えられます。
> 横幅に余裕がない。


タブ幅は列ごとに設定できるでしょ。CListBox::SetTabStopsを使えばok。

GG 2007/02/02(金) 08:09:46
ぬふやさん、Kerryさん、

丁寧な解説ありがとう。

古いスレッドには追加発言できません。