WinXP VC2005を使用しています。
CComboBoxの派生クラスを使用して、Createの引数に、
WS_VSCROLL|WS_HSCROLL を入れています。
垂直スクロールバーは出るのですが、水平スクロールバーが出ません。AddStringで長い文字列を入れると横にはみ出して見えません。
どのようにしたら、水平スクロールバーが出るのでしょうか?
また、上記ができない場合、
リストに入る文字列のピクセルの最大幅をCreateのRECTの引数に入れようと思うのですが、
CComboBoxからGetDCできないため、GetTextExtentが使えません。
どのようにしたら、リストにある最大幅(最大ピクセル)を取得し、適切なCComboBoxをCreateできるのでしょうか?
すみませんが、ご教授願います。
WS_HSCROLLは必須でCreateした後に
SendMessage( hCmbBox, CB_SETHORIZONTALEXTENT, 400, 0 );
でどうでしょう。
とさまありがとうございます。
必須なのですが。。SendMessageするなら、GetTextExtentしてリストにある文字列の最大ピクセルをCreateするときに設定したいのですが、CComboBoxでGetDCできないです。 リストにある文字列の最大長をCreate時のRECTに入れてあげるうまい方法はないでしょうか?
ご教授お願いします。
メモリDCを作成してコンボボックスと同じフォントを選択してやれば
とりあえず幅は計れませんかね。
リスト内で一番長い文字の文字数を数えておいて、
テキストボックスのフォントをGetFontで取得して文字幅取得し
先ほどの文字数の積とって最大横幅とするとか。
メモリDCに書くのもいいけど
幅計るのに更新領域取得できたっけ?
1pxずつ見ていくのはつらそう。
>メモリDCに書くのもいいけど
>幅計るのに更新領域取得できたっけ?
>1pxずつ見ていくのはつらそう。
メモリDCに「書く」のではなく、フォントの選択のみを行います。
リスト内の一番長い文字列を使用してCDC::GetTextExtentで測るって意味です。
解決しました。
ドロップダウンリストにある文字列を1つ1つGetTextExtentで測って、
一番長いサイズをRECTで渡してあげるようにしました。
みなさま、大変ありがとうございました。