VC++6.0SP5 on Windows2000 で開発しています。
CListBoxを使用して文字列を表示したときに、CListBoxのサイズより文字列が長ければ
水平スクロールバーによりスクロールできるようにしようと思いました。
しかし、スクロールの最大幅はSetHorizontalExtent()で指定できるのですが、
引数としてピクセルで与えなければなりません。
表示する文字列長のピクセル値を与えてあげればよいのでしょうが期待した値を取得する
方法が見つかりません。
CListBoxのCDCからGetTextExtent()で文字列のサイズを取得してみたのですが
うまい具合にいきませんでした。
たぶん、他に良い方法があると思うのですが教えていただけないでしょうか?
>CListBoxのCDCからGetTextExtent()で文字列のサイズを取得してみたのですが
>うまい具合にいきませんでした。
どのようにした場合に、どのように上手くいかなかったのでしょうか?
こんな感じ?
CListBox *clb=(CListBox *)GetDlgItem(IDC_LIST2);
char txt[]=123456789012345678901234567890;
CDC *cdc;
CFont *cfs;
clb->AddString(txt);
cdc=clb->GetDC();
cfs=cdc->SelectObject(clb->GetFont());
clb->SetHorizontalExtent(cdc->GetTextExtent(txt,strlen(txt)).cx+3);
cdc->SelectObject(cfs);
clb->ReleaseDC(cdc);
島さん、NEGさん、フォローありがとうございます。
>どのようにした場合に、どのように上手くいかなかったのでしょうか?
ListBoxの幅に収まっているにもかかわらず、スクロールバーでスクロールできてしまうのです
正しい値を設定していないので当然と言えば当然なのですが、そこで正しい値を設定して
文字長がListBoxの幅を越えたときだけ、スクロールできるようにしたかったのです。
その値の取得方法をご教授いただきたかったのです。
で、NEGさんの方法で期待通りの動作を確認できました。
ありがとございました。
Fontも考慮に入れないといけなかったのですねぇ。
ちょっと手を抜きすぎてたようです。反省します。m(u.u)m