Wie kann ich bitte Windows für die Größe des system-tray-icons?
Bemerkte ich, dass meine app sendet icons auf der Windows-Taskleiste mit einer Größe von 16x16 Pixel--und meinem Vista-PC habe ich eine doublewide-Taskleiste, die erscheint, um zu zeigen Symbole an 18x18. Die Größe Artefakte auf meinem app-icon Aussehen schrecklich. Wie kann ich bitte Windows, welche Größe die icons sein sollen?
edit:
Bin ich generieren das icon dynamisch, mit einem pixel-schriftart-textüberlagerung. Es scheint verschwenderisch zu generieren, die eine Reihe von icon-Größen dynamisch, so dass es schön wäre, zu vermeiden, Bau ein Symbol mit alle "möglichen" Größen (nicht, dass ich mich einmal sicher, was diese sind).
GetSystemMetrics(SM_CXSMICON) Rückgabe 16--der falsche Wert.
GetThemeBackgroundContentRect nicht helfen, entweder.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie Ihre icons in verschiedenen Formaten und lassen Sie Windows wählen Sie die, die Sie will.
Hier ist der Wikipedia-Artikel über die .ico-format.
Wenn Sie wirklich brauchen, zu wissen, GetSystemMetrics mit einem parameter von Indizes sm_cxicon oder SM_CYICON wird Ihnen sagen, die Breite und Höhe, die Windows laden möchte.
Shell_NotifyIcon
. Erhält einNOTIFYICONDATA
enthält eineHICON
. Nun, einHICON
bezieht sich auf ein einzelnes Symbol, so müssen Sie entscheiden die Größe, bevor Sie anrufenShell_NotifyIcon
. Der Letzte Absatz ist korrekt obwohl.Daneben der Kern der Antwort ist die richtige: Erstellen Sie Ihre icons in verschiedenen Formaten und lassen Sie Windows den richtigen zu wählen. Vergessen Sie nicht zu tun, 32x32 und 64x64 icons für HighDPI-Szenarien.
Aber Indizes sm_cxicon/SM_CYICON nicht unbedingt die Größe zurückgeben, die verwendet werden in der Taskleiste. Die Taskleiste wählt die richtige icon-Größe für die Größe (das ist viel mehr wichtig, in Window 7).
Nur entsprechend dimensionierten icons, und Sie sollten ok sein.
Shell_NotifyIcon
. Erhält einNOTIFYICONDATA
enthält eineHICON
. Nun, einHICON
bezieht sich auf ein einzelnes Symbol, so müssen Sie entscheiden die Größe, bevor Sie anrufenShell_NotifyIcon
.LoadIcon
bekommen Sie am nächsten Indizes sm_cxicon. Die Dokumentation für NOTIFYICONDATA schlägt mitLoadIconMetric
verwendet der Algorithmus, den Larry beschreibt in seinem Kommentar. Aber es gibt keinen einfachen Weg, um herauszufinden, die Größe, die Sie verwenden. Ich nehme an, Sie verwenden eine Vielzahl von Größen von Platzhalter-Symbole in der Ressourcen, und dann sehen, welche LoadIconMetric eigentlich wählt...Ihre beste Wette sein kann GetThemeBackgroundContentRect vorbei
TBN_BACKGROUND
als iPartId für das Fach Benachrichtigen hintergrund.GetThemeBackgroundContentRect sollte die Größe zurückgeben, definiert durch das aktuelle Thema, das kann zum zeichnen verwendet werden, ohne überlappung der Grenzen des übergeordneten Elements. Wenn ich lese das richtig, dass wäre die größte Größe-Benachrichtigung Symbol zulässig und vermutlich die Größe, die verwendet wird.
Tests mit mehreren DPI-Einstellungen ist wahrscheinlich der einfachste Weg, zu sagen, ob das wieder der richtige Wert.