質問
アプリケーションのアイコンをロードするための最適なスキームは何ですか?
ちょっとした背景... 4つのペイン(ローカルフォルダーペイン、ローカルファイルペイン、クラウドフォルダーペイン、クラウドファイルペイン)を持つFTPのようなアプリケーションを作成しています。両方のファイルペインで、列の1つがファイル名です。ファイル名の横にアイコンを表示します(Windowsエクスプローラーで表示されるように)。
クラウド内のすべてのファイルの物理ファイルがないという事実を実行し、レジストリを調べて(ファイル拡張子を手に)、そのファイルタイプのExeFileNameとIconIndexの組み合わせを取得する必要があります。そこでアイコンを取得します。とはいえ、私には以下のオプションがあると思うので、あなたの意見を聞きたいと思います:
1)プログラムのロード時および必要に応じてクエリですべての拡張子(例:.doc、.txt)のすべてのExeFileName / IconIndexの組み合わせをロードし、それらを使用してExtractIcon Win32 APIを呼び出します。
2)ExeFileName / IconIndexの組み合わせを取得し、関連するファイルタイプのアイコンのExtractIcon Win32 APIを呼び出す必要がある場合にのみ、レジストリを調べます。
3)既知のすべての拡張子の1バイトファイルをディレクトリに保存し、SHGetFileInfo Win32 APIを呼び出して、必要に応じてファイルから関連アイコンを取り出します。
4)インストール時にすべてのファイル拡張子の物理アイコンファイルをディレクトリに保存し、必要に応じてこれを呼び出します(ただし、ファイルの関連付けの変更、追加、削除では変更されません)。
5)全体をジャンクして、既知の上位1000個のアイコンファイルタイプを持つアイコンショップからアイコンセットを購入し、他のファイルタイプの未知のアイコンタイプを表示します。
時間とコメントをありがとう。
-ジェシー・ホール
解決
結果をキャッシュする限り、オプション2が最も合理的だと思うので、特定の種類のファイルが多数ある場合でも、その種類のファイルを一度だけクエリします。
オプション4&と思います5は関連付けの変更を反映しないためです。これは、アプリとWindowsエクスプローラーでアイコンが異なる場合、ユーザーを混乱させる可能性があります。
オプション1& 3は、特によくあるアイコンを何度も表示する可能性が高く、おそらくより不明瞭なアイコンを表示することはほとんどないため、やりすぎのように見えます。