-PR-
解決
済み

水平スクロールができない。

  • 暇なときにでも
  • 質問No.565972
  • 閲覧数836
  • ありがとう数4
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 68% (895/1314)

hLB=CreateWindow
("LISTBOX",NULL,WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|LBS_MULTIPLESEL,0,0,400,400,hW,NULL,hI,NULL);
SendMessage(hLB,LB_SETHORIZONTALEXTENT,256,0);
i=(int)SendMessage(hLB,LB_GETHORIZONTALEXTENT ,0,0);
TextOut(hD,300,0,s,strlen(itoa(i,s,10)));
(ただしchar s[99];と宣言されている)
として200文字の文字列を200個リストボックスに格納すると
垂直スクロールバーはできるのですが水平スクロールバーができず水平方向にオーバーフローした文字を見るためのスクロールもできません。
しかしTextOutの結果は256になります。
どうすれば水平スクロールバーを出すことができ水平スクロールできるようになるのでしょうか。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.2
レベル14

ベストアンサー率 65% (1020/1553)

あれ?正しく幅を設定すればスクロールバー消えるはずですけど。
消えないように(不要なときは使用不可)するには
LBS_DISABLENOSCROLLを指定する必要があります。

なんで、長さの計算が合っていないのでは?
固定値を入力するのではなく、ちゃんとGetTextExtentPoint等を使ってデバイスコンテキストから

必要なピクセル数求めないとダメですよ。
お礼コメント
keyguy

お礼率 68% (895/1314)

やっぱりおおちゃくは駄目ですね。
すべての項目文字の幅のなかの最大値を求めてそれで幅を設定しなければならないのですね。
リストコントロールがやってくれたらというのは贅沢ですね。
ありがとうございました。
投稿日時 - 2003-06-05 01:43:32
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 65% (1020/1553)

LB_SETHORIZONTALEXTENTは、ピクセル数を指定します。 ソースで256と指定しているので、256ピクセル分しかリストの幅はないということになるので、256ピクセルより幅が広い場合はスクロールバーは出ません。 文字数ではないところに注意してください。 ...続きを読む
LB_SETHORIZONTALEXTENTは、ピクセル数を指定します。

ソースで256と指定しているので、256ピクセル分しかリストの幅はないということになるので、256ピクセルより幅が広い場合はスクロールバーは出ません。

文字数ではないところに注意してください。
お礼コメント
keyguy

お礼率 68% (895/1314)

ありがとうございました。解決しました。
SendMessage(hLB,LB_SETHORIZONTALEXTENT,16384,0);
とすれば動きました。
どうも符号付き2バイト整数のようで32768以上を設定すると駄目みたいですが余り大きく設定するとスクロール範囲が広がりすぎ利用しない方がましになってしまいます。
データ数が少なく垂直スクロールする必要が無いときには自動的に垂直スクロールバーが消えるのですが
文字列の長さが短くて水平スクロールする必要が無いときでも指定した長さ用の水平スクロールバーがでてしまします。
垂直スクロールバーと違って水平スクロールバーは自分で長さに応じて設定するしか仕方がないのでしょうか?
自動的に消えたり長さが自動的に合わされるような設定はないものでしょうか?
投稿日時 - 2003-06-04 22:58:09
このQ&Aのテーマ
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


-PR-

ピックアップ

-PR-
ページ先頭へ