VC# .NETのListViewコントロールについて質問です。


現在、エクスプローラライクなアプリケーションを作成しています。

そこで質問です。
エクスプローラ上でアイコンを選択し、切り取りをするとアイコンが半透明になるのですが、これを.NET Frameworkではどうすれば再現出来るのでしょうか?

ListViewItemには「Alpha」みたいなプロパティがあるわけでもなく、また、参考になりそうな文献がなくて困っています。

⇒環境
Microsoft Visual C# 2008 Express Edition

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2008/10/11 16:55:27
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:ardarim No.1

回答回数897ベストアンサー獲得回数145

ポイント35pt

ListViewItemには、複数のアイコンイメージ(ImageList)を割り当てておくことができます。このImageListに、通常アイコン、切取り時のアイコン、など様々な状態の場合のアイコンをまとめて登録しておき、ImageIndexでどのアイコンを実際に表示するかを切り替えます。

切取り時半透明にしたいのであれば、あらかじめ半透明のアイコン画像を作ってImageListに追加する必要があります。


そうして通常は通常アイコン(0)にしておき、切取り処理を行った時にはそのアイテムのImageIndexを変更して切取りアイコンの番号に変更します。

id:kiku-_-san

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

勉強になります。

ただアイコンに関しては作るのではなく、ファイルの拡張子を元にシステムから取得しています。(例えば、環境によってAVIファイルのアイコンが違うというケースがあるので)

アイコンの取得方法を参考にしているページは下記のURLにあるソースです。

http://palepoli.skr.jp/blog_src/20080505.html

この場合、半透明のアイコンはどうやって取得したら良いのでしょうか?

システムから取得出来るのであれば別の方法でもかまいません。

2008/10/07 22:29:12
id:ardarim No.2

回答回数897ベストアンサー獲得回数145

ポイント35pt

ネイティブであればLVM_CREATEDRAGIMAGEを使って半透明のイメージリストを作ることができますが、C#.NETでは用意されていないようです。


P/Invokeを使ってLVM_CREATEDRAGEIMAGEを呼び出すしかなさそうですが、ちょっと面倒ですね。


サンプルかけなくて申し訳ありませんが、参考になりそうな資料だけピックアップしておきます。

ListViewのColumnの順番を取得、設定する: .NET Tips: C#, VB.NET, Visual Studio:SendMessageを使ってLVM_xxxxxを呼び出す方法

ImageList_GetIcon:LVM_CREATEDRAGIMAGEで取得したHIMAGELISTハンドルからHICONハンドルを取り出す

Imaging.CreateBitmapSourceFromHIcon メソッド (System.Windows.Interop):HICONからイメージを取り出す

id:kiku-_-san

途中まで書いてみたのですが、SendMessageの引数に何を指定すればいいのか分からないので断念していまいました。。。

2008/10/08 21:33:40

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません