- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:水平スクロールができない。)
水平スクロールができない
このQ&Aのポイント
- リストボックスで水平スクロールバーを表示できない状態になっています。TextOutの結果は256です。
- 垂直スクロールバーは表示されていますが、水平スクロールバーが表示されず、文字列の水平方向のオーバーフローを見ることができません。
- 水平スクロールバーを表示するためには、リストボックスの幅を指定する必要があります。SendMessage関数を使用して、リストボックスの水平方向の幅を指定してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
あれ?正しく幅を設定すればスクロールバー消えるはずですけど。 消えないように(不要なときは使用不可)するには LBS_DISABLENOSCROLLを指定する必要があります。 なんで、長さの計算が合っていないのでは? 固定値を入力するのではなく、ちゃんとGetTextExtentPoint等を使ってデバイスコンテキストから 必要なピクセル数求めないとダメですよ。
その他の回答 (1)
- taka_tetsu
- ベストアンサー率65% (1020/1553)
回答No.1
LB_SETHORIZONTALEXTENTは、ピクセル数を指定します。 ソースで256と指定しているので、256ピクセル分しかリストの幅はないということになるので、256ピクセルより幅が広い場合はスクロールバーは出ません。 文字数ではないところに注意してください。
- 参考URL:
- http://www.microsoft.com/japan/developer/library/vcmfc/_mfc_clistbox.3a3a.sethorizontalextent.htm
質問者
お礼
ありがとうございました。解決しました。 SendMessage(hLB,LB_SETHORIZONTALEXTENT,16384,0); とすれば動きました。 どうも符号付き2バイト整数のようで32768以上を設定すると駄目みたいですが余り大きく設定するとスクロール範囲が広がりすぎ利用しない方がましになってしまいます。 データ数が少なく垂直スクロールする必要が無いときには自動的に垂直スクロールバーが消えるのですが 文字列の長さが短くて水平スクロールする必要が無いときでも指定した長さ用の水平スクロールバーがでてしまします。 垂直スクロールバーと違って水平スクロールバーは自分で長さに応じて設定するしか仕方がないのでしょうか? 自動的に消えたり長さが自動的に合わされるような設定はないものでしょうか?
お礼
やっぱりおおちゃくは駄目ですね。 すべての項目文字の幅のなかの最大値を求めてそれで幅を設定しなければならないのですね。 リストコントロールがやってくれたらというのは贅沢ですね。 ありがとうございました。