CListBoxの水平スクロール値の設定方法 – プログラミング – Home

CListBoxの水平スクロール値の設...
 
通知
すべてクリア

[解決済] CListBoxの水平スクロール値の設定方法


zeta
 zeta
(@zeta)
ゲスト
結合: 22年前
投稿: 20
Topic starter  

VC++6.0SP5 on Windows2000 で開発しています。
CListBoxを使用して文字列を表示したときに、CListBoxのサイズより文字列が長ければ
水平スクロールバーによりスクロールできるようにしようと思いました。

しかし、スクロールの最大幅はSetHorizontalExtent()で指定できるのですが、
引数としてピクセルで与えなければなりません。

表示する文字列長のピクセル値を与えてあげればよいのでしょうが期待した値を取得する
方法が見つかりません。

CListBoxのCDCからGetTextExtent()で文字列のサイズを取得してみたのですが
うまい具合にいきませんでした。

たぶん、他に良い方法があると思うのですが教えていただけないでしょうか?


引用未解決
トピックタグ
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

>CListBoxのCDCからGetTextExtent()で文字列のサイズを取得してみたのですが
>うまい具合にいきませんでした。

どのようにした場合に、どのように上手くいかなかったのでしょうか?


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 22年前
投稿: 178
 

 こんな感じ?

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);


返信引用
zeta
 zeta
(@zeta)
ゲスト
結合: 22年前
投稿: 20
Topic starter  

島さん、NEGさん、フォローありがとうございます。

>どのようにした場合に、どのように上手くいかなかったのでしょうか?

ListBoxの幅に収まっているにもかかわらず、スクロールバーでスクロールできてしまうのです
正しい値を設定していないので当然と言えば当然なのですが、そこで正しい値を設定して
文字長がListBoxの幅を越えたときだけ、スクロールできるようにしたかったのです。
その値の取得方法をご教授いただきたかったのです。

で、NEGさんの方法で期待通りの動作を確認できました。
ありがとございました。

Fontも考慮に入れないといけなかったのですねぇ。
ちょっと手を抜きすぎてたようです。反省します。m(u.u)m


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました