Icon display in WinForms app - winforms

When an application icon is displayed, is it Windows who decides which version (bit depth) to use or is it somehow set in the ICO file?
If I create an ICO file only with 32bit colors (24bit + 8bit transparency), the icon displays fine on Win XP. If I add for example 4bit version, Windows use always this 4bit version, even if there are 32bit images as well. My monitor is set to 32bit colors. I am using Greenfish Icon Editor if this is any important.
Is there any way how to push Windows to use the 32bit icons instead of the 4bit ones?
EDIT: I used IcoFX to just open the original ICO file and re-save it and now Windows always chooses the right bit depth. Interesting...

It's chosen by Windows based on the bit-depth of the surface it's drawn onto. It also depends on the actual order of the icons inside the .ICO file (or resource), that's why you get different result with IcoFX.

Windows will use the icon with whatever bit depth it can display, so your understanding of how things should work is correct.
I've not used Greenfish, so don't know if it is creating the icon file correctly. If you're using VS2008 you could try the (free) Axialis IconWorkshop to double-check the icon file (they have a non-free standalone version also).

Related

Making icon for a Windows Form: How to make it show up correctly?

OK, so I have built a Windows Form application. I now want an icon for it. So I use the Icon Editor built into Visual Studio 2012. Draw it all out to look nice and purdy. Once I am done, I have a .ico file and I make it the default icon for the project, and also the icon for the one WinForm in the application.
Unfortunately, it does not show up as I have created it! It is displayed as the default icon file as it existed before I modified it in the icon editor. It's a 32x32 4 bit icon. If I change the extension to .bmp it shows up as the default.
It looks like the VS icon editor is editing something else, not the appearance of the icon. Can someone tell me what I am doing wrong?
I used to have a progam called IconArt that would create icons that looked like icons when I used them in VS. IconArt is now abandonware and won't run on my 64bit Windows workstation.
Since I didn't get any answers within the time I was hoping, I posted this question also in the MSDN Visual Studio forum, and got a good answer that I thought I should post here. Credit to Reed Copsey, Jr, for the answer!
This is it:
You'll need to put your design in all of the different versions. ICO
files contain multiple versions of the same image, for different
screen resolutions.
My personal preference is to not use VS - there's an ICO plugin for
Paint.Net (all free) which allows you to make a single image
(typically 256x256), and save multiple versions within an ICO file in
one shot. It's very useful for building icons.
See
http://forums.getpaint.net/index.php?/topic/927-icon-cursor-and-animated-cursor-format-v37-may-2010/
for the plugin.
Since I am a Paint.Net user, the plugin sounded like a great idea, and I tried it. Bingo! This works very nicely.

Having trouble setting the icon in MSVC 2008

I am making a C++/CLR Winforms application in MSVC 2008, but I can't seem to set the icon.
I have added a .ico file as a Resource (Add->Resource->Icon->Import) and added a line to the .rc file (and fully recompiled, but nothing has changed; it still uses the default icon.
There are no other icons added. I can see and edit the .ico with the in-built icon editor; it has both 16x16 and 32x32 sizes.
What else do I have to do?
[Edit] Just noticed that my icon is correctly showing in Windows Explorer, but not in the application when it runs.

WPF application shows "Image format is unrecognized "

I have a WPF application which runs fine on Windows 7 OS. But the same app crashes on a particular few Windows XP machines.
It runs fine on few windows XP machine. but on a few XP machine it fails to start.
ERROR - Image format is unrecognized.
I know this question has been asked few times. but my problem is i am still not able to figure out as to how to resolve this.
Should I change the .ico used for the application ..
Unfortunately, simply removing the 256x256 application isn't the greatest solution when you want to support the large icon size for Windows Vista, 7, 8 and forward.
Another way to solve this problem ... is to not compress the 256x256 image in the icon. See this forum thread for more info.
How does one do that? Well, most icon utilities will have an option for this (as this is a common problem). I use IcoFX and below you can see the option (highlighted in red) I needed to clear.
I've had a bit of fun with this problem this morning. It turned out that the error was occurring only on XP machines where the colour settings were set to 16 bit, and when I changed it to 32-bit the problem magically disappeared.
This goes for XP (including Embedded) SP3.
In your WPF application you will have at least two places to set icons:
The application icon. This is used for displaying the application in Explorer, desktop, etc. You set this in the project properties.
The window icon. This is used as icon in the upper-left corner of the window, and perhaps for alt-tabbing and on the taskbar. You set this as the Icon property on the window.
Often, you may use the same icon file in both cases. However, if you have a compressed 256x256 icon as window icon, then this can crash in Windows XP. This is what you are experiencing. On the other hand, this not the case when the application icon has a compressed 256x256 icon.
So another solution (which I implemented in all my projects) is to have two icons: The application icon (which contains all sizes) and a special "window icon" version, which only contains the sizes 16x16 and 32x32 (since those are the only sizes which are used).
If I remember correctly Windows XP does not support icons larger than 48x48 pixels and this could be the reason for the crash. .ico files should definitely run on both systems.
You can create an icon that support multiple sizes, so if you add 48x48 and for example 256x256 in the same file you should be good. Also be sure to use select a good software to produce the icon when making icons that support multiple sized. I've used Greenfish Icon Editor which I think works fine. But there are multitudes of other products for this.
Be sure to read The ICON handbook, section Windows, it contains good info about what icon sizes and bit depths to use.
Other threads on SO supports my belief:
problems with icon image
Which icon sizes should my Windows application's icon include?
Another workaround to (16/32bit resolution problem) is not to define icon in XAML, but load it in code:
this.Icon = new BitmapImage(new Uri("pack://application:,,,/UserInterface;component/Resources/Icons/ReportViewer.ico"));

Changing the default file path for icons in Visual Studio

On a WPF project, if I have an image and click on 'Source' and then 'Add' I get the choice to import images into the project. Is there a way of changing this file location?
VS2010 currently defaults to the "Libraries / Pictures" setting. I'd rather not change where this library points to as I don't store icons and pictures together.
After a bit of research I set up a new Windows library (useful article here) for icons but I can't work out how to set VS to default to the icons library I created, does anyone know how to do this?
Using Process Monitor on my machine when doing this, I see the following:
Calls to RegOpenKey, RegQueryKey aimed at:
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32
This seems to be a list of the last projects I've added/opened in Visual Studio. To test this, I added a project from a different location to my solution, then tried to change the source of the image.
Sure enough, the dialog defaulted to that location.
Your mileage my vary, but certainly, on my machine, the behaviour seems tied to what project I opened last. You can use Process Monitor to monitor devenv.exe while you choose an image on your machine to see what happens.
Given this, though, it would seem that you can't change this behaviour, although you can influence it.

Using Visual Studio Image Library PNGs in a Windows Form app

My question is about the Visual Studio Image Library that comes with VS2008. In the _Common Elements\Annotations folder, there are PNGs with multiple sizes and I was wondering what the intended use of these is. Is there an standard way to implement these images, e.g. in a Windows Forms status bar?
Here are three of the PNGs as an example:
The suggested usage is to basically copy/paste the sized image you want into a new image file. Then simply use that as an icon or image in your controls as you see fit. All of the PNGs already have a transparent background, so it should be really easy to copy/paste.

Resources