views:

100

answers:

1

What would be the best scheme for loading icons for an application?

A little bit of a background... I’m creating an FTP-like application that has 4 panes (local folder pane, local file pane, cloud folder pane, cloud file pane). In both file panes, one of the columns is filename, which I want to display the icon next to (just like you see in Windows Explorer).

Do to the fact that I do not have the physical file for all files in the cloud, I have to poke into the registry (with file extension in hand) and get the ExeFileName and IconIndex combination for that file type, and from there the retrieve the icon. That said, I think that I have the below options, and would like to get your opinion:

1) Load all ExeFileName/IconIndex combinations for every extension (EG: .doc, .txt) on program load and as needed query and use them to call out to the ExtractIcon Win32 API.

2) Poke into the registry only when needed to get the ExeFileName/IconIndex combinations and call out to the ExtractIcon Win32 API for the icon of the associated file type.

3) Save a 1 byte file of every extension known, to a directory and call out to the SHGetFileInfo Win32 API and pluck the associated icon from the file when needed.

4) Save the physical icon file for every file extension at the time of install to a directory and call out to this when need (but will not change with file association changes, additions, or deletions).

5) Junk the whole thing and buy a set of icons from an icon shop that has the top 1000 icon file types known, and display an unknown icon type of the other file types.

Thank you for your time and comments.

-Jessy Houle

+1  A: 

I think option 2 sounds the most reasonable, as long as you cache the results, so you only query a given file type once, even if there are many files of that type.

I think options 4 & 5 are out, since they will not reflect changes in associations. This could confuse the user if the icons are different in your app versus windows explorer.

Options 1 & 3 seem like overkill, especially since you will most likely be showing the most common icons many times, and perhaps never showing the more obscure ones.

pkaeding