… oder sollte man sagen: Nicht so wie erwartet.
In einer der Micosoft Newsgroup fand sich eine Anfrage, die sich um folgenden Code drehte:
HICON m_hIcon[2];
[...]
m_hIcon[0] = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_hIcon[1] = AfxGetApp()->LoadIcon(IDR_SMALL);
[...]
SetIcon(m_hIcon[0], TRUE); // Großes Symbol verwenden
SetIcon(m_hIcon[1], FALSE); // Kleines Symbol verwenden
Das Problem des Posters war, dass er sich Mühe mit dem Layout eine kleines Icons gegeben hat, aber leider immer nur ein verkleinertes 32×32 Icon verwendet wurde.
Das Problem liegt an der Verwendung von LoadIcon! LoadIcon lädt immer das Standard-Format 32×32. Bzw. in dem Format, dass durch das System als Standard-Icon-Größe vorgegeben wird.
Um es richtig zu machen, muss man das Icon wirklich in der gewünschten Größe laden. Dazu verwendet man die Funktion LoadImage. Eine kleine Helper Routine LoadIconEx kann dann wie folgt aussehen:
HICON LoadIconEx(PCTSTR pszIconName, bool bLargeIcon)
{
HINSTANCE hInstance = ::AfxFindResourceHandle(pszIconName,RT_GROUP_ICON);
return reinterpret_cast<HICON>(::LoadImage(
hInstance,
pszIconName,
IMAGE_ICON,
GetSystemMetrics(bLargeIcon ? SM_CXICON : SM_CXSMICON),
GetSystemMetrics(bLargeIcon ? SM_CYICON : SM_CYSMICON),
0));
}