I am porting an old (Visual Studio 6.0) application to Visual Studio 2012 in order to add some enhancements. The application's icon in the resources view clearly has 2 versions of the icon, a 32x32 4bit bitmap and a 16x16 4bit bitmap.
In the main AppDlg.cpp there are 2 calls to SetIcon() as follows (created by default by MFC app wizard):
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
However, the icon displayed in the top left corner of the application's dialog window is the larger one, scaled down to 16x16 instead of the small one. Its also happening for the icon shown in the system tray.
It seems it uses the correct small one for the executable file when viewing it in Windows Explorer (detailed view / list view). So it is picking the small one in some circumstances.
How do I make it choose the smaller 16x16 icon for the top left corner of the dialog box and System tray?
Known Microsoft bug. See this discussion. (if you do not want to read, just comment out SetIcon(m_hIcon, FALSE) line and you'll be fine). Please note, that SetIcon only sets the icon on the dialog title bar (small icon) and when you use Alt-tab (big icon)
The icons you see in the Windows Explorer are the main Application Icons (the icon with the lowest ID in you rc file). It has nothing to do with the main dialog's SetIcon() method
The icon in the System Tray is something completely different. Normally, you would use Shell_NotifyIcon API to set the icon, but I bet your project would have a helper class that sets the icon CSystemTray by Chris Maunder is a popular one used by many programmers. Just search for Shell_NotifyIcon in your program to find out exactly what resource is used for the system tray icon
Related
I support several Visual Studio 2012 MFC applications, and all of them are exhibiting the same bad behavior on Windows 10 only: resizing a docked pane (via mouse) leaves artifacts, i.e. garbage on the screen. The garbage looks like a series of lines that correspond to the intermediate positions of the pane edge being dragged. I can reproduce this behavior with a stock VS 2012 application, which proves that it's got nothing to do with my code. Here are simple instructions for replicating the bug.
In the VS 2012 New Project Wizard, select MFC Application and press OK. Accept the defaults for all options EXCEPT ONE: On the very last page (Generated Classes), change the Base class from CView to CScrollView. Then press Finish.
Now make the following edit. Find the line "// TODO: calculate the total size of this view" in OnInitialUpdate, in the view .cpp file. Change the size from 100 to 2000. The only purpose of this change is to ensure that the view has scrollbars.
Now run the resulting app under Windows 10. Try resizing the docked panes. Do you see the artifacts? They generally appear when the scroll view is getting BIGGER. Why is this happening? Would migrating to VS 2017 solve it? Or is Windows 10 now incompatible with MFC? Ever since I migrated to the "new" MFC (BCGSoft) features, I've been worried that their code is too complex and would break in some future release of Windows. It sure looks as if I was right to fear this.
Intro:
OS: Windows 10
DPI: 96
I got metrics of recommended sizes small (16x16) and large (32x32) icons of my application, called SetClassLong function to set him. Everything is working!
BUT!! After launching the application, the icon displayed in the taskbar has a size of 24x24.
Why such a size? I setted only the recommended 16x16 and 32x32? How can I control the real icon in the taskbar (except for calling SetOverlayIcon)
How can I give the system a 24x24 icon (which one should it be for
other dpi?) If the metric request recommends me 16x16 and 32x32?
Forget about the GetSystemMetrics() since it hasn't been updated in ages. To provide a 24x24 icon that Windows 10 uses for display on the task bar just set the hIcon member of your WNDCLASS to such icon.
I noticed the following feature of the "buddy list" window of pidgin on windows: If you drag the window not far from the top right corner of the desktop, the following things happen:
The appearance of the border slightly changes:
Before:
After:
It docks on the right of the desktop
And here is the most interesting: it reserves the space on the desktop. All other maximized windows are reduced by the width of pigin window. All other windows behave as if the width of the desktop was shorter by the width of the pidgin window
Q: What is the name of the feature implemented by the last point ?
You create custom toolbars that the desktop observes when it calculates the working area with the SHAppBarMessage() api function. Check the MSDN Library page for documentation, it also googles really well to find sample code.
its called docking. Microsoft one-note has the same feature.
I've got an windows mobile 6.5 application I'm developing and am having trouble with one icon. At the top right hand of the screen there is an icon that, when clicked, will display a list of programs running the background with the option to close them.
When my program is in this list, it's icon does not show up as the others do.
I'm my exe I've got an .ico for 16x16, 22x22, 32x32, 36x36, 44x44, 45x45, 60x60, and 64x64, with the optional 90x90 png and registry setting in my cab.
What am I missing?
I'm just guessing here, but is this an HTC phone? Stock Windows Mobile does not have a "task list" icon in the system tray, so this task list is provided by the OEM. You would need to find out how they are obtaining the icon.
Chances are they are not obtaining it from the cab, but are actually getting it from your top level app window. You should check you're specifying the right icon in your WNDCLASS structure when calling RegisterClass. It is pretty common in WM to forget this because normally this icon is not visible.
Windows Embedded Handheld (Windows Mobile) 6.5/6.5.3 Appications use the exe embedded ico files only if there is no icon via registry available. In those cases the icon also look very ugly in the start menu. So you will have to add a registry entry to an icon file.
[HKEY_LOCAL_MACHINE\Security\Shell\StartInfo\Start\MyApp.lnk]
"Icon"="\Windows\myapp.png"
See also: https://blogs.windows.com/windowsexperience/2009/08/11/using-custom-icons-in-windows-mobile-6-5/
Control Panel items are normally registered under HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\ControlPanel\NameSpace, however a lot of the built-in panels aren't listed there, such as the Automatic Updates item.
I'm trying to find out where the icon used for the Automatic Updates item is. If you open the Control Panel in Tiles mode (48x48 icons) you'll see the icon is being scaled up, yet all of the icon resources in all of the Windows Update files have 48x48 subimages, so I can't figure this one out.
It's a similar story with the NVidia control panel item: the icon is black and seemingly downscaled from a subimage larger than 48x48, yet the actual nvidia control panel files don't contain this black icon (instead they have the silver version). When I create a Shortcut to the control panel item and inspect its binary bits there is no path to the icon specified, just to the cpl file itself (with the totally different icon). I've checked the registry and there aren't any clues in there either.
Any ideas?
Control Panel applets can be registered in several different ways, or not at all (if they reside in the %system% folder):
Registering Control Panel Items
If an applet does not register its icon information in the Registry, then the applet has to provide the icon information when requested by the Control Panel via the CPL_INQUIRE and/or CPL_NEWINQUIRE messages to its CPLApplet() entry point, in which case the applet has no idea what size icon to return. It sounds like maybe you are running into that scenario.