(Ich bin mit Visual Studio 2008, obwohl ich auch ähnliche Probleme mit älteren Versionen mit Speichern.)Probleme mit der Einstellung Anwendungssymbol
ich verschiedene Methoden (viele von ihnen in this other question erwähnt) versucht haben, aber ich habe immer noch einige seltsame Fragen:
Wenn ein Symbol als Ressource einschließlich, es zeigt auf, als die ausführbare Datei des Symbol sofort, aber für das Symbol in der Taskleiste zeigen, muss ich neu starten der Computer. Bis dahin zeigt es sich immer noch als das, was das vorherige Symbol war. Das Reinigen der Lösung und das Neustarten von VS haben keine Auswirkungen. Kein wirklich großes Problem, da es sich nicht auf eine freigegebene Exe auswirken wird, aber es wäre schön zu wissen, wo es das alte Icon im Cache hält und wie man es loswird.
Egal was ich mache, das Symbol wird angezeigt, wenn Alt-Tabbing das Standard-App-Symbol ist (quadratisch und weiß und generisch). Dazu gehört das Einbetten des Symbols in die ausführbare Datei sowie das Festlegen von
ICON_BIG
mitWM_SETICON
.
Was die zweite Frage, sieht mein Code so etwas wie:
hIcon = (HICON)(
LoadImage(NULL, szFilename, IMAGE_ICON, 32, 32, LR_LOADFROMFILE));
if(hIcon)
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
jedoch nach dem Senden WM_SETICON
, GetLastError()
kehrt 6, "Der Griff ist ungültig.". hWnd
ist ein gültiges Fensterhandle und hIcon
scheint ein gültiges Symbolhandle zu sein. Ich habe versucht, nach Gründen zu suchen, warum WM_SETICON
diesen Fehler verursachen konnte, und mindestens, um herauszufinden, welcher Griff es denkt, ist ungültig, aber noch kein Glück. Ich habe den Fehlercode sofort vor dem Aufruf SendMessage()
gelöscht, so dass es irgendwo in der Verarbeitung der Nachricht festgelegt werden muss.
Ich habe versucht, ein alternatives Verfahren, das Symbol aus der exe selbst Laden, in dem die ID der Ressource 101
(es das erste und einzige Ressource ist im Lieferumfang enthalten):
hIcon = (HICON)(
LoadImage(GetModuleHandle(NULL), MAKEINTRESOURCE(101),
IMAGE_ICON, 48, 48, 0));
if(hIcon)
SendMessage(hWnd, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
... aber die gleiche Sache das passiert; Nach dem Aufruf SendMessage()
gibt GetLastError()
den gleichen Fehlerstatus.
Ich habe verschiedene Dimensionen (wie 48x48, die alle in der Symboldatei vorhanden sind) ausprobiert, aber zu keinen anderen Effekt. Ich weiß, dass es die Bilder definitiv findet und lädt, weil, wenn ich eine Größe gebe, die nicht existiert, oder eine ungültige Betriebsmittelidentifikation oder der falsche Dateiname (abhängig davon, wie ich es lade) es lange vor SendMessage()
ausfällt.
Seltsam, wenn ich ICON_SMALL
statt ICON_BIG
angeben, ist der Aufruf erfolgreich ohne Fehlerstatus, sondern von the docs, ich brauche ICON_BIG
zu verwenden, um das Symbol, während Alt-Tab verwendet einzustellen. Wenn ich ICON_BIG
verwende, aber das 16x16 Icon lade, bekomme ich keinen Fehlerstatus, aber nichts ändert sich.
Irgendwelche Ideen über das, was WM_SETICON
zum Scheitern bringen könnte? Alles, was mit dem Code, den ich gepostet habe, schrecklich falsch ist (abgesehen von Formatierungs-/Stil-/Casting-Problemen, da es nur auf die Grundlagen vereinfacht wird)?
Ich laufe auf das gleiche Problem heute. Leider funktioniert das nicht für mich. Ich muss im Internet nach anderen Lösungen suchen. – Lothar
Die 'LoadImage' Methode funktioniert gut, um das Icon im' alt' + 'Tab' Menü zu zeigen. Ich hatte das Problem, dass ich' 'LoadImage'' BIG_ICON'' nicht auf 32x32 setzte, nachdem ich das gemacht habe Lief wie am Schnürchen. Siehe: http://stackoverflow.com/a/24029664/1828637 – Noitidart