現在、エクスプローラライクなアプリケーションを作成しています。
そこで質問です。
エクスプローラ上でアイコンを選択し、切り取りをするとアイコンが半透明になるのですが、これを.NET Frameworkではどうすれば再現出来るのでしょうか?
ListViewItemには「Alpha」みたいなプロパティがあるわけでもなく、また、参考になりそうな文献がなくて困っています。
⇒環境
Microsoft Visual C# 2008 Express Edition
ListViewItemには、複数のアイコンイメージ(ImageList)を割り当てておくことができます。このImageListに、通常アイコン、切取り時のアイコン、など様々な状態の場合のアイコンをまとめて登録しておき、ImageIndexでどのアイコンを実際に表示するかを切り替えます。
切取り時半透明にしたいのであれば、あらかじめ半透明のアイコン画像を作ってImageListに追加する必要があります。
そうして通常は通常アイコン(0)にしておき、切取り処理を行った時にはそのアイテムのImageIndexを変更して切取りアイコンの番号に変更します。
ネイティブであれば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からイメージを取り出す
途中まで書いてみたのですが、SendMessageの引数に何を指定すればいいのか分からないので断念していまいました。。。
ご回答頂きありがとうございます。
勉強になります。
ただアイコンに関しては作るのではなく、ファイルの拡張子を元にシステムから取得しています。(例えば、環境によってAVIファイルのアイコンが違うというケースがあるので)
アイコンの取得方法を参考にしているページは下記のURLにあるソースです。
http://palepoli.skr.jp/blog_src/20080505.html
この場合、半透明のアイコンはどうやって取得したら良いのでしょうか?
システムから取得出来るのであれば別の方法でもかまいません。