2009-02-20 4 views
9

Ich habe festgestellt, dass meine App Icons an das Windows-Tablett mit einer Größe von 16x16 Pixeln sendet - und mein Vista-PC Ich habe eine doppelt breite Taskleiste, die Symbole bei 18x18 zu zeigen scheint. Die Größenänderungsartefakte auf dem Symbol meiner App sehen furchtbar aus. Wie kann ich Windows fragen, wie groß die Symbole sein sollten?Wie frage ich Windows nach der Größe der Taskleistensymbole?

edit:

Ich Erzeugung das Symbol dynamisch, mit einem Pixel-Font Text-Overlay. Es scheint verschwenderisch zu sein, eine Menge Icon-Größen dynamisch zu generieren, also wäre es nett, ein Icon mit allen "möglichen" Größen zu erstellen (nicht dass ich mir überhaupt sicher bin, was das ist).

GetSystemMetrics (SM_CXSMICON) gibt 16 - den falschen Wert zurück.

GetThemeBackgroundContentRect hat auch nicht geholfen.

Antwort

0

Erstellen Sie Ihre Symbole in verschiedenen Formaten und lassen Sie Windows die gewünschte auswählen.

Here's the Wikipedia article on the .ico format.

Wenn Sie wirklich wissen müssen, GetSystemMetrics mit einem Parameter von SM_CXICON oder SM_CYICON werden Ihnen sagen, die Breite und Höhe, das Windows laden will.

+3

Die erste Hälfte dieser Antwort ist einfach falsch. Die API für Benachrichtigungssymbole ist 'Shell_NotifyIcon'. Dieser erhält eine "NOTIFYICONDATA", die ein "HICON" enthält. Nun bezieht sich ein 'HICON' auf ein einzelnes Symbol, so dass Sie die Größe bestimmen müssen, bevor Sie' Shell_NotifyIcon' aufrufen. Der letzte Absatz ist jedoch korrekt. –

1

Marks Kernantwort ist die richtige: Erstellen Sie Ihre Symbole in mehreren Formaten und lassen Sie Windows die richtige wählen. Vergessen Sie nicht, 32x32- und 64x64-Symbole für HighDPI-Szenarien zu verwenden.

Aber SM_CXICON/SM_CYICON gibt nicht unbedingt die Größe zurück, die in der Taskleiste verwendet wird. Die Taskleiste wählt die richtige Icon-Größe für ihre Größe (das ist viel wichtiger in Window 7).

Stellen Sie einfach entsprechend große Symbole und Sie sollten in Ordnung sein.

+2

Ich denke, ich hätte erwähnen sollen: Ich erzeuge das Icon dynamisch, mit einem Pixel Font Text Overlay. Es erscheint verschwenderisch, eine Reihe von Symbolgrößen dynamisch zu generieren. GetSystemMetrics (SM_CXSMICON) gibt 16 - den falschen Wert erneut zurück. – keelo

+1

Leider ändert diese Information meine Antwort nicht - Sie müssen immer noch mehrere Symbolgrößen erstellen. Oder erstellen Sie einfach ein 256x256 Symbol und lassen Sie das System für Sie skalieren. –

+1

Das Generieren von 256x256 Pixeln mit Schriftarten führt zu einem unlesbaren Text, wenn das Symbol leider auf 16x16 resampelt wird. – keelo

0

Ihre beste Wette kann GetThemeBackgroundContentRect sein, die TBN_BACKGROUND als iPartId für den Behälter überschreitet, benachrichtigen Hintergrund.

GetThemeBackgroundContentRect sollte die vom aktuellen Design definierte Größe zurückgeben, das zum Zeichnen verwendet werden kann, ohne die Ränder des übergeordneten Elements zu überlappen. Wenn ich das richtig lese, wäre das das größte zulässige Benachrichtigungssymbol und vermutlich die Größe, die verwendet wird.

Das Testen mit mehreren DPI-Einstellungen ist wahrscheinlich der einfachste Weg, um festzustellen, ob dies den richtigen Wert liefert.

+3

GetThemeBackgroundContentRect mit TBN_BACKGROUND nicht mit der Tray-Icon-Größe ändert sich auch nicht. – keelo

Verwandte Themen