2010-12-22 1 views
1

Ich habe ein CWnd-Fenster, das ich dynamisch erstellen, und es scheint, dass das Symbol für Titelleiste Bereich und Taskleiste zufällig oder etwas ausgewählt wird.Was passiert mit CWnd Symbol

das Symbol zu setzen, ich rufe:

// Set the icon for this dialog. The framework does this automatically when the application's main window is not a dialog 
m_hIcon = AfxGetApp()->LoadIconW(IDI_ICON); 
SetIcon(m_hIcon, TRUE);   // Set big icon 
SetIcon(m_hIcon, FALSE);  // Set small icon 

Wie in MFC-Proben, aber es scheint, dass das 32x32 icon immer gewählt und verkleinerter wird, obwohl es gibt auch andere, näher zur Verfügung Begegnungen. Das Symbol in der Titelleiste ist eigentlich nur 16x16, aber es wird von 32x32 Version erstellt.

Dies führt zu einem Durcheinander, wenn das 32x32-Symbol detaillierter als das 16x16-Symbol ist, da das herunterskalierte Symbol wie eine Unschärfe aussieht.

CFrameWnd Windows scheinen sich irgendwie anders zu benehmen, da sie eine engere Übereinstimmung zu wählen scheinen.

Kennt jemand eine Lösung zum Erzwingen kleiner Symbol in der Titelleiste, damit ich die größeren Symbole für W7-Taskleiste behalten konnte?

Antwort

2

Es ist LoadIcon, nicht LoadIconW, das kompiliert zufällig. Die MFC-Methode verwendet die LoadIcon() - API-Funktion. Aus der SDK-Dokumentation:

LoadIcon kann nur ein Symbol, das lädt Größe entspricht die SM_CXICON und SM_CYICON System Metrikwerte. Verwenden Sie die LoadImage-Funktion, um Symbole anderer Größen zu laden.

Verwenden Sie stattdessen LoadImage(), damit Sie eine geeignete Größe übergeben können. Machen Sie zwei Aufrufe, um eine große und eine kleine Version abzurufen. Oder speichern Sie das kleine Symbolbild in einem anderen Symbol mit einer anderen Ressourcen-ID.

+0

+1 Wenn Sie eher ein "Geben Sie mir den Codez" -Typ sind, lesen Sie [diesen Artikel] (http://www.borngeek.com/code/system-menu-icon-bug/). Obwohl ich anstelle von "16" vorschlage, empfehle ich 'GetSystemMetrics (SM_CXSMICON)', um die * korrekte * Größe zu bestimmen. –

+0

Aber was ist mit diesen 256x256 PNG komprimierten Bildern oder 64x64 Icons, verwendet die 7 sie nicht in einigen anderen Fällen als in C (XY) ICON? Für exe scheint es das erste Symbol von Ressourcen, aber die Symbole werden an so vielen Orten verwendet, dass es scheint, 64x64 Symbol könnte irgendwo erscheinen (Alt Registerkarte, kleine/große Taskleiste, Infobereich), und wenn ich die laden werde CXICONxCYICON Symbol als das große Symbol und CXSMICONxCSMYICON als das kleine Symbol wird es in einigen anderen Fällen nicht brechen? – Coder

+0

Es scheint auch, dass wenn das System C (XY) ICON als, sagen wir, 25x25, aber ich habe 16x16, 32x32, 64x64 und 256x256 Symbole, dann lädt das LoadImage das 64x64-Symbol? – Coder