CListCtrlでのスクロールバー

[戻る]
まなみ 2010/03/24(水) 17:04:52
お世話になります。
WindowsXP VS2008で開発しています。

ダイアログベースのアプリにリストコントロールを配置しています。
アイテムが増えてくると、右端に垂直スクロールバーが表示されます
が、このスクロールバーの幅を広くすることは可能でしょうか?
(タッチパネルのため、標準の幅では使いづらいため)

GetScrollBarCtrl()からCScrollBarを取り出し、MoveWindow()等で
幅を変更しようとしましたが、CScrollBarがNULLとなりできませんでした。

何か良い方法がないでしょうか。
宜しくお願い致します。

仲澤@失業者 2010/03/24(水) 19:02:02
デスクトップの「プロパティDLG」の「デザイン」の
「詳細設定」ボタンで表示される「デザインの詳細」DLGの
「指定する部分」コンボで「スクロールバー」を選択して
「サイズ」を設定する
・・・・ぢゃだめですか(^^;)。

aetos 2010/03/24(水) 19:19:17
> ぢゃだめですか(^^;)。

合理的だと思います。
このアプリに限らず、システム全般で垂直スクロールバーが使いにくいはずですから。

まなみ 2010/03/25(木) 08:54:40
仲澤@失業者様
aetos様

回答ありがとうございます。

確かにプロパティで変更する方法もあるかと思いますが、
他のボタンなどのコントロールは指で押せる大きさにして
いますので、スクロールバーのみプロパティで変更と言う
のは、ちょっと...

また、「システム全般で・・・」とのことですが、
このシステムは基本タッチパネルで行いますが、
データ入力などの細かな作業はマウスを使います。
なので、このアプリだけ(このスクロールバーだけ)幅広
にしたいのです。

bun 2010/03/25(木) 09:25:36
仮想リストコントロールにするのはどうでしょう。
と言ってもそういう機能がある訳じゃなく、力技ですが。

やり方は、
スクロールバーはリストコントロールに頼らず、自分でリストコントロールの横
に貼り付ける。これなら、スクロールバーの太さは自在でしょ。

で、スクロールバーの位置から表示を開始するアイテムを計算して、そのアイテ
ムから順にリストコントロールに追加する。画面いっぱいまで追加したら、その
先はもう追加しない。そうすることにより、リストコントロール自体のスクロー
ルバーは常に表示されないように制御するわけ。

この仮想リストコントロールのメリットは他にもあります。
初期表示の際に全てのアイテムをリストコントロールに追加しなくていいので、
アイテム数が多いときには圧倒的に初期表示が高速になります。

仲澤@失業者 2010/03/25(木) 10:09:28
そうなると簡単な方法はありません。

タッチパネルは指を使うことを前提にしているのでしょうか(質問)。

そう仮定すると、一般にその様なシステムの場合「スクロールはさせない」
が設計の前提になっていたりします。指ではドラッグが難しいので
スクロールバーの機能の大半が使用に耐えないため、標準のスクロールバー
は使用せずページスクロール用のボタンを別途用意する仕様にしているものが、
ほとんどです。駅の自動券売機なんかはわりと良くできてます。

どうしてもクロールバーを使用したい場合は、CScrollBarをウインドウ
としてCreate()して、コントロールするしかないと思います。

まなみ 2010/03/25(木) 11:22:00
> タッチパネルは指を使うことを前提にしているのでしょうか(質問)。
基本は指ですが、場合によってはペンも使用することもあり得ます。
使う側の勝手になってしまうので、断定はできません。
ですが、最低19インチワイド(1440x900)で行うので、指で十分できる
大きさです。

> ページスクロール用のボタンを別途用意する仕様にしているものが
過去にどうようなケースがあり、ボタンを使用して行ったことがあります。
この時もスクロールバーの幅を変更できないかと色々と行ったのですが
挫折しました。
なので、今回再チャレンジしようと思ったのです。

今までのレスの内容からすると、リストコントロールのスクロールバーの
幅は簡単には変更できないようですね。

今、私なりに考えている方法は、bun様の方法みたいにリストコントロールの
横に幅を広くした垂直スクロールバーを配置し、リストコントロールのスク
ロールバーとリンクするようなカラクリでいけるかなっと思っています。

どちらにせよ、スマートの方法ってないですよねぇ〜

仲澤@失業者 2010/03/25(木) 11:35:18
>今、私なりに考えている方法は、bun様の方法みたいにリストコントロールの
>横に幅を広くした垂直スクロールバーを配置し、リストコントロールのスク
>ロールバーとリンクするようなカラクリでいけるかなっと思っています。

常識的にはその通りだと思いますが、対象のアプリが、
実用性よりインタラクティブやアメニティが勝っている場合で、
「対象のCListCtrlから他のウインドウにドラッグ&ドロップはしない」
のなら、ドラッグ操作自体でウインドウをスクロールしてしまう
というのも、「あり」かもしれません(iPhoneやGoogl-EarthみたいなUI)。

まなみ 2010/03/26(金) 08:36:41
[[解決]]
みなさま、色々とありがとうございました。

スクロールバーのリンクやスクロール用のボタン等の試みはまだ行って
いませんが、リストコントロールのスクロールバー幅の変更は、
できない(難しい)とのことで、本件は解決としました。

上記の方法、どちらかを採用しようと思いますが、また、困ったときに
お尋ねするかもしれません。
その時は、宜しくお願い致します。

古いスレッドには追加発言できません。