- PR -

c#によるCImageListの使用・代用

1
投稿者投稿内容
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2006-04-25 15:12
題名のとおりなのですが、MFCのCImageListにあたるクラスまたは代用策を探しています。何でかというと http://www.kab-studio.biz/Programing/Codian/ShellExtension/08.html のページで紹介されているファイルからアイコンを取得する方法を試すときに戻り値としてシステムイメージリストへのポインターが帰ってくるのでそれを操作したいためです。

アイコンの取得だけならいろいろほかの方法があるんですが、キャッシュを使用しているので早いということでどんなものかと試してみたいという興味から・・・

ちなみにshinfo.hIconで取得できるアイコンでアイコンを作成した場合普通の場合、速度にほとんど変化はありませんでした(Marshal.Free(shinfo.hIcon)としても普通にエクスプローラーでは生きてますし。)

現状ではここまでプログラムが終わっています。
コード:
// Get icon from SystemIconCache
SHFILEINFO shinfo = new SHFILEINFO();
			
IntPtr hSuccess = SHGetFileInfo(pidl,0, ref shinfo, (uint)Marshal.SizeOf(shinfo),flag);
// flagないにはSHGFI_PIDLとSHGFI_SYSICONINDEXが含まれる。



ご教授よろしくお願いします。
_________________
9uiet Design - http://quietdesign.rental.allinoneserver.net/
デザインにこだわったソフトの配布とプログラミングTipsの公開(予定)をしています。
9uiet Blog - http://seiga.blog44.fc2.com/
笑ったことやプログラミングのことなど書
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-04-25 16:38

些か低レベルですが、comctl32.dll に含まれる ImageList_GetIcon 関数を使うとか。


[ メッセージ編集済み 編集者: Hongliang 編集日時 2006-04-25 16:40 ]
清華
ベテラン
会議室デビュー日: 2005/12/21
投稿数: 50
投稿日時: 2006-04-25 22:47
結局その方法にたどり着きいろいろ試していたんですが、とんでもなく早いですね(汗。

30回繰り返しで行うテストをしてみたんですが、差が歴然です。

IconCacheを使用。
1270μs

普通にアイコンを取得
62540μs

システムアイコンキャッシュではなく独自でアイコンキャッシュ作ってやってみたんですが、この結果です。さすがメモリとしか言いようのない満足いく結果になりました *^^

# めんどくさかったけどImageList系Apiのラッパクラスがんばって作ってよかった〜
_________________
9uiet Design - http://quietdesign.rental.allinoneserver.net/
デザインにこだわったソフトの配布とプログラミングTipsの公開(予定)をしています。
9uiet Blog - http://seiga.blog44.fc2.com/
笑ったことやプログラミングのことなど書
1

スキルアップ/キャリアアップ(JOB@IT)