総ありがとう数 累計4,308万(2014年11月23日現在)

毎月4,000万人が利用!Q&Aでみんなで助け合い!

-PR-
keyguy

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
  • 気になる数0

Aみんなの回答(全2件)

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

  • 2003-06-05 00:50:41
  • 回答No.2
あれ?正しく幅を設定すればスクロールバー消えるはずですけど。
消えないように(不要なときは使用不可)するには
LBS_DISABLENOSCROLLを指定する必要があります。

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

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

その他の回答 (全1件)

  • 2003-06-04 19:11:07
  • 回答No.1
LB_SETHORIZONTALEXTENTは、ピクセル数を指定します。

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

文字数ではないところに注意してください。
お礼コメント
ありがとうございました。解決しました。
SendMessage(hLB,LB_SETHORIZONTALEXTENT,16384,0);
とすれば動きました。
どうも符号付き2バイト整数のようで32768以上を設定すると駄目みたいですが余り大きく設定するとスクロール範囲が広がりすぎ利用しない方がましになってしまいます。
データ数が少なく垂直スクロールする必要が無いときには自動的に垂直スクロールバーが消えるのですが
文字列の長さが短くて水平スクロールする必要が無いときでも指定した長さ用の水平スクロールバーがでてしまします。
垂直スクロールバーと違って水平スクロールバーは自分で長さに応じて設定するしか仕方がないのでしょうか?
自動的に消えたり長さが自動的に合わされるような設定はないものでしょうか?
投稿日時 - 2003-06-04 22:58:09
通報する
  • 同意数0(0-0)
  • ありがとう数0
  • 回答数2
  • 気になる数0
  • ありがとう数2
  • ありがとう
  • なるほど、役に立ったなど
    感じた思いを「ありがとう」で
    伝えてください

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

別のキーワードで再検索する

あなたの悩みをみんなに解決してもらいましょう

  • 質問する
  • 知りたいこと、悩んでいることを
    投稿してみましょう
-PR-
-PR-
-PR-

特集

専門医・味村先生からのアドバイスは必見です!

-PR-

ピックアップ

  • easy daisy部屋探し・家選びのヒントがいっぱい!

-PR-
ページ先頭へ