• ベストアンサー

コンボボックスのリストに水平スクロールバーを表示したい

WinXP,SDKで開発しています。 今、最大サイズ画面の右側にあるコンボボックスのリスト部分が表示仕切れなくて困っています。 実際のコンボボックスは小さく、リスト表示の時に大きくしています。 SendDlgItemMessage(hwnd, IDC_COMBO1, CB_SETDROPPEDWIDTH, 240, 0L); このサイズで丁度リストの中身が見えるのですが、リストが画面からはみ出しています。 そこで、リストのサイズを200くらいにして(200で画面に収まります)水平スクロールを表示したいのですがうまく行きません。 ShowScrollBar() で表示出来るかと思ったのですが、渡すウィンドウハンドルが分からないのです。 おそらくリストのウィンドウハンドルだと思うのですが… このリストのウィンドウハンドルを取得する方法がよく分からないのです。 GetComboBoxInfo() という関数があるようなのですが、コンパイルエラーになってしまって先にすすみません。(定義されていない識別子) そもそも考え方を間違えているのでしょうか。 もっと簡単な方法がありますか? アドバイスをお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★次の1行で良いと思います。 SendMessage( hWndCombo, CB_SETHORIZONTALEXTENT, ピクセル幅, 0 ); ※コンボボックスのスタイルに水平スクロールバーを持つスタイルを設定します。 ※このスタイルがないと CB_SETHORIZONTALEXTENT メッセージは無効になります。 ※WS_HSCROLLスタイルを参照のこと。

mm666
質問者

お礼

ご回答ありがとうございます。 CB_SETHORIZONTALEXTENTはやってみたのですが、水平スクロールが出てこなかったので諦めていました。 WS_HSCROLLスタイルも、リソースエディタを使ってコンボボックスを生成していたため発見出来ませんでした。(リソースエディタには無いのでしょうか?) WS_HSCROLLスタイルを追加するのに苦労しましたが、結果きちんと水平スクロールが表示されました。 アドバイス、ありがとうございました。助かりました。

その他の回答 (3)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.4

ダウンロードセンターなどでPlatformSDKをダウンしてみてはいかがでしょう http://www.microsoft.com/msdownload/platformsdk/sdkupdate/default.htm 上記からアクセスしてみてください WebInstall遷移すると思います ISOイメージやCAB形式のリンクも遷移後のページの下部のほうにあります

mm666
質問者

お礼

ご回答ありがとうございます。 早速ダウンロードしてテスト環境を整えて水平スクロールが表示される事が確認出来ました。 ありがとうございます。 複数人で開発を行っているために自分だけ環境を変えての開発が難しいので、今回Oh-Orangeさまの手法を取らせて頂いたのですが、今後開発環境を変えていった場合に利用出来る事が分かり、大変助かりました。 何度もアドバイス頂き感謝しております。 ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

WinUser.hに有るようですよ 当方のVC6.0では WinUser.hの10000行あたりに記述があります

mm666
質問者

お礼

ご回答ありがとうございます! ということは、VC5.0では使えないという事なのですね… WinUser.hはインクルードしているのですが駄目なのです。 中身を見てみましたが、やはり定義されていないようでした。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

コンボボックスを作成してから COMBOBOXINFO構造体の変数を用意してコンボボックスの子コントロールのリストコントロールのハンドルを取得します コンボボックスに対してCB_SETHORIZONTALEXTENTを送ってスクロール量を設定して置きます COMBOBOXINFO info; ZeroMemory( &info, sizeof( info ) ); info.cbSize = sizeof( info ); if ( ::GetComboBoxIndo( hWndCombo, &info ) ) {   if ( info.hwndList ) {     ::ShowScrollBar( info.hwndList, SB_HORZ, TRUE );   } } ::SendMessage( hWndCombo, CB_SETHORIZONTALEXTENT, 240, 0 ); といった具合でいいのではと思います hWndComboはコンボボックスのウィンドウハンドルです

mm666
質問者

お礼

早速のご回答ありがとうございます! GetComboBoxInfo()と、COMBOBOXINFO構造体はどのヘッダに定義されているのでしょうか。 どのヘッダを検索しても出てこないのです。 Developer StudioのVisual C++5.0を使用しております。

関連するQ&A