たびたびお世話になっております。
VC++ 6.0 ATL/WTL でエクスプローラ機能を持ったファイル選択アプリケーションを作成
しています。
ファイル表示をListViewで行っているのですが、
特定の拡張子の画像ファイルだけをサムネイル表示して、
その他のファイルはシステムイメージリストのアイコンで表示する・・といったことは
できないでしょうか・・?
ちょうどエクスプローラの「縮小版」表示みたいなのを目標にしています。
よろしくお願い致します。
CListCtrlのスタイルには縮小版に相当する物がないみたいなので
アイコンビューみたいなスタイルでオーナードロウとかカスタムドロウするしかないので
は無いでしょうか。
特に特定の拡張子のファイルだけと言うような処理をするのであれば、
そのままコントロール既存の動作に任せて何とかできる可能性は低いと思います。
カスタムドロウで何とかできれば、特定の場合の描画のみ記述する事で済みますが、
オーナードロウで実現するしかない場合は、通常の描画に当たる部分も自分で行う必要が
あるので作業量的にはかなりの量になりそうですね。
縮小版表示に対応したOCXがあるならそれを使えば楽を出来そうですが、
フリーで提供されているとは考えにくいかな。
PATIOさん、ありがとうございます
CListViewだとこちらでドローするしかないですよねぇ。
その前処理辺りでかなり苦しむことになりそうですね。。
フリーで提供されてるのはなさそうです。
※ 有償のものならいくつかあるようでしたが・・・
# 有償で提供されているくらいですから、
# 自前で作るのはこの辺りが限界なのかもしれません。。(^^;;
そこで、いっそのこと「エクスプローラの機能を使っちゃえ」ということになりまし
て、シェルAPIを使うことにしました(^^;;
IShellFolderからIShellViewを取り出し、IShellViewにウィンドウを作らせてエクスプ
ローラ画面を「縮小版」表示で使うことで何とか対応し(誤魔化し?)ました。
ただ、9x系では動かないかも。。(縮小版表示なかったですよね・・・)
選択/選択解除の捉え方など、シェルAPIの資料が少なくて、四苦八苦してます。
どなたか、サンプルが豊富なサイトなどご存知でしたら、ご紹介いただけると幸いで
す。
一応、質問の件は片付きましたので、解決とさせていただきます。
ありがとうございましたm(_ _)m
IExtractImage 周りを調べてみるといいかもしれません。
IExtractImage でサムネイルイメージは抽出できるけれど、それを描画するのは結局オ
ーナードローです。
壮大な勘違いをしていましたorz
でも IExtractImage と IExtractIcon を使用して
得たグラフィックオブジェクトをイメージリストで表示すれば
それっぽくできるかな……
結局 Shell Extension を使用しているので IShellView を使用する方法と
変わらない気はしますが^^;
> でも IExtractImage と IExtractIcon を使用して
> 得たグラフィックオブジェクトをイメージリストで表示すれば
> それっぽくできるかな……
できなくは無いですが、イメージを要求される都度、動的に返さなければいけないの
で、I_IMAGECALLBACK を使わなければならないでしょう。
再描画の必要があるたびに、イメージリストに動的にアイコンを追加して、そのインデ
ックスを返す。
イメージリストがどんどん肥大化していきますね。
何らかの方法で、以前使ったインデックスを覚えておいて、追加する前にそれを削除す
るという方法も考えられますが、どっちがいいかは場合によりけり。
どっちもそれなりに面倒くさい気がするなぁ。個人的にはオーナードローが好み。
追加レス有難うございます。
イメージリストの肥大化も非常に悩んでました。
システムイメージリストを丸ごとコピーしようとしたのですが、タイミングによりシス
テムから追加されるようなので、リスト表示のたびにイメージリストをコピーして作り
直していました。
イメージリストのコピーもAPIの都合で9x系での動作が×だったと思います。
結局システムイメージリストを操作するしか方法がないみたいでした。。
オーナードローの方、検討してみます!