コンボボックスに水平スクロールバーを追加するには?

解決


TK  2008-04-16 13:52:54  No: 68035  IP: 192.*.*.*

WinXP VC2005を使用しています。

CComboBoxの派生クラスを使用して、Createの引数に、
WS_VSCROLL|WS_HSCROLL  を入れています。

垂直スクロールバーは出るのですが、水平スクロールバーが出ません。AddStringで長い文字列を入れると横にはみ出して見えません。
どのようにしたら、水平スクロールバーが出るのでしょうか?

また、上記ができない場合、
リストに入る文字列のピクセルの最大幅をCreateのRECTの引数に入れようと思うのですが、
CComboBoxからGetDCできないため、GetTextExtentが使えません。
どのようにしたら、リストにある最大幅(最大ピクセル)を取得し、適切なCComboBoxをCreateできるのでしょうか?

すみませんが、ご教授願います。

編集 削除
 2008-04-16 14:10:46  No: 68036  IP: 192.*.*.*

WS_HSCROLLは必須でCreateした後に
SendMessage( hCmbBox, CB_SETHORIZONTALEXTENT, 400, 0 );
でどうでしょう。

編集 削除
TK  2008-04-16 14:41:32  No: 68037  IP: 192.*.*.*

とさまありがとうございます。
必須なのですが。。SendMessageするなら、GetTextExtentしてリストにある文字列の最大ピクセルをCreateするときに設定したいのですが、CComboBoxでGetDCできないです。  リストにある文字列の最大長をCreate時のRECTに入れてあげるうまい方法はないでしょうか?

ご教授お願いします。

編集 削除
subaru  2008-04-17 00:10:10  No: 68038  IP: 192.*.*.*

メモリDCを作成してコンボボックスと同じフォントを選択してやれば
とりあえず幅は計れませんかね。

編集 削除
そだ  2008-04-17 12:15:29  No: 68039  IP: 192.*.*.*

リスト内で一番長い文字の文字数を数えておいて、
テキストボックスのフォントをGetFontで取得して文字幅取得し
先ほどの文字数の積とって最大横幅とするとか。

メモリDCに書くのもいいけど
幅計るのに更新領域取得できたっけ?
1pxずつ見ていくのはつらそう。

編集 削除
subaru  2008-04-17 13:51:26  No: 68040  IP: 192.*.*.*

>メモリDCに書くのもいいけど
>幅計るのに更新領域取得できたっけ?
>1pxずつ見ていくのはつらそう。

メモリDCに「書く」のではなく、フォントの選択のみを行います。
リスト内の一番長い文字列を使用してCDC::GetTextExtentで測るって意味です。

編集 削除
TK  2008-04-17 15:57:10  No: 68041  IP: 192.*.*.*

解決しました。
ドロップダウンリストにある文字列を1つ1つGetTextExtentで測って、
一番長いサイズをRECTで渡してあげるようにしました。
みなさま、大変ありがとうございました。

編集 削除