• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:スクロールバーでのピクチャーコントロールやリストビューの移動)

スクロールバーでのピクチャーコントロールやリストビューの移動

このQ&Aのポイント
  • MFCでダイアログ上にリストコントロールとスクロールバー、またはピクチャーコントロールとスクロールバーを設置した際に、スクロールバーの移動に伴って、リストコントロール内の列や、ピクチャーコントロールに表示されている画像の見えている箇所を移動させることが出来るかどうか。
  • 本格的にプログラムを作り始めていないが、事前にこのような動作が実現可能かどうか知りたい。
  • 開発環境はWindows CE 6.0とVisual Studio 2005。参考になるHPや方法を教えてほしい。

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

  • ベストアンサー
  • tanma3
  • ベストアンサー率58% (14/24)
回答No.2

>仮想リストを使用する場合に特に普通のリストと、 >プログラムを作成する点で違う箇所はありますでしょうか? プログラム的には大きく違います。オーナードローを使用するため、 使用するイメージ、項目等の領域は自分で保持、管理しなければ なりません。 しかし、描画の高速化、メモリ節約が出来るという点は、 大きなメリットです。 >リストコントロールだと自動でスクロールバーを表示してくれる >みたいなのですが、現在開発している機器がタッチパネル式のため、 >自動で表示されるスクロールバーではタッチするには小さいため、 >出来れば別で大きい垂直スクロールバーを設置して動かしたいと >思っています。 >そのようにする場合にはDlgにOnVScroll()のイベントを作成して、 >その関数内でリスト内の項目を移動させるように処理すればよい >のでしょうか? そういった実装を行ったことが無いので、なんともいえないので、私の予想ですが、 clistctrlのスクロールバーをfalseにするということですよね。 そうすると、スクロールエリアがないということになると思うので、 そもそも移動が出来ないと思います。 スクロールバーをtrueにして、その上に強制的に独立した スクロールバーを配置するなら別だと思いますが。。。 普通はそんなことはしないですよね。 もしかしたら、clistctrlクラスをオーバーラップし、そこで GetScrollBarCtrlを利用しスクロールバーのポインタを取得して、 そのポインタ経由で、スクロールバーの大きさを変更するといった ことは、出来るかもしれません。 すべては、予想ですが。。。

fujtomo
質問者

お礼

丁寧な説明ありがとうございます。 仮想リストのメモリの節約というのは限られたメモリの組み込み機器にはかなり大きなメリットですね!! 早速調べて使ってみたいと思います。 リストのスクロールバーについては、もう少し調べてみます。 リストの標準のスクロールバーを表示させて、他に上下移動用のボタンを配置させ、そのボタンをタッチさせスクロールバーを移動させたり、キーボード操作でスクロールバーを移動させたりでもいいかなと思っていますので、その方法でも検討してみて分からなければ、もしかすればもう一度こちらに質問させて頂くかもしれません。 ご回答ありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tanma3
  • ベストアンサー率58% (14/24)
回答No.1

結論は出来ます。 リストコントロールの場合は特別な処理はいりません。 リストコントロールのスクロールバーを有効にして、リストにデータをセットすれば、スクロールバーを動かすと勝手に描画領域は更新されます。 ただ、組み込み系ですので、メモリー等のことを考えると仮想リストとして実装する方が無難だと思います。 ちなみに、サムネイル表示も可能です。 ピクチャーコントロールでの実装経験が無いので、具体的な実装方法はわかりませんが、最悪ピクチャーコントロールを利用しなくても、スクロールバーとメモリデバイスコンテキストを使用して、移動量を取得して、自分で描画更新をかければ実装できると思います。

fujtomo
質問者

お礼

ご回答ありがとうございます。 仮想リストコントロールというのがあるのですね、初耳です。 ネットで調べてみると、仮想リストコントロールというのはリストへのデータの表示が早いみたいですね。 仮想リストを使用する場合に特に普通のリストと、プログラムを作成する点で違う箇所はありますでしょうか? リストコントロールだと自動でスクロールバーを表示してくれるみたいなのですが、現在開発している機器がタッチパネル式のため、自動で表示されるスクロールバーではタッチするには小さいため、出来れば別で大きい垂直スクロールバーを設置して動かしたいと思っています。 そのようにする場合にはDlgにOnVScroll()のイベントを作成して、その関数内でリスト内の項目を移動させるように処理すればよいのでしょうか? 重ねての質問で申し訳ございませんが、ご回答を宜しくお願い致します。

すると、全ての回答が全文表示されます。

関連するQ&A