電子書籍の厳選無料作品が豊富!

お世話になります。
今回お聞きしたいことは
MFCでダイアログ上にリストコントロールとスクロールバー、またはピクチャーコントロールとスクロールバーを設置した際に、スクロールバーの移動に伴って、リストコントロール内の列や、ピクチャーコントロールに表示されている画像の見えている箇所を移動させることが出来るかどうか。
です。
まだ、本格的にプログラムを作り始めてるわけではないのですが、事前にこのような動作が実現可能かどうかお聞きしたく、質問させて頂きました。
もしご存知の方がいましたら、参考になるHPや方法を教えていただければと思っています。参考になるHPがなくても、実現可能かどうかだけ教えて下さるだけでも結構ですので、宜しくお願い致します。

開発環境は
Windows CE 6.0
Visual Studio 2005
です。

A 回答 (2件)

>仮想リストを使用する場合に特に普通のリストと、


>プログラムを作成する点で違う箇所はありますでしょうか?
プログラム的には大きく違います。オーナードローを使用するため、
使用するイメージ、項目等の領域は自分で保持、管理しなければ
なりません。
しかし、描画の高速化、メモリ節約が出来るという点は、
大きなメリットです。

>リストコントロールだと自動でスクロールバーを表示してくれる
>みたいなのですが、現在開発している機器がタッチパネル式のため、
>自動で表示されるスクロールバーではタッチするには小さいため、
>出来れば別で大きい垂直スクロールバーを設置して動かしたいと
>思っています。
>そのようにする場合にはDlgにOnVScroll()のイベントを作成して、
>その関数内でリスト内の項目を移動させるように処理すればよい
>のでしょうか?
そういった実装を行ったことが無いので、なんともいえないので、私の予想ですが、
clistctrlのスクロールバーをfalseにするということですよね。
そうすると、スクロールエリアがないということになると思うので、
そもそも移動が出来ないと思います。
スクロールバーをtrueにして、その上に強制的に独立した
スクロールバーを配置するなら別だと思いますが。。。
普通はそんなことはしないですよね。

もしかしたら、clistctrlクラスをオーバーラップし、そこで
GetScrollBarCtrlを利用しスクロールバーのポインタを取得して、
そのポインタ経由で、スクロールバーの大きさを変更するといった
ことは、出来るかもしれません。

すべては、予想ですが。。。
    • good
    • 0
この回答へのお礼

丁寧な説明ありがとうございます。
仮想リストのメモリの節約というのは限られたメモリの組み込み機器にはかなり大きなメリットですね!!
早速調べて使ってみたいと思います。

リストのスクロールバーについては、もう少し調べてみます。
リストの標準のスクロールバーを表示させて、他に上下移動用のボタンを配置させ、そのボタンをタッチさせスクロールバーを移動させたり、キーボード操作でスクロールバーを移動させたりでもいいかなと思っていますので、その方法でも検討してみて分からなければ、もしかすればもう一度こちらに質問させて頂くかもしれません。

ご回答ありがとうございました!

お礼日時:2009/05/25 10:36

結論は出来ます。



リストコントロールの場合は特別な処理はいりません。
リストコントロールのスクロールバーを有効にして、リストにデータをセットすれば、スクロールバーを動かすと勝手に描画領域は更新されます。
ただ、組み込み系ですので、メモリー等のことを考えると仮想リストとして実装する方が無難だと思います。
ちなみに、サムネイル表示も可能です。

ピクチャーコントロールでの実装経験が無いので、具体的な実装方法はわかりませんが、最悪ピクチャーコントロールを利用しなくても、スクロールバーとメモリデバイスコンテキストを使用して、移動量を取得して、自分で描画更新をかければ実装できると思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/05/22 09:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!