winapi - Hvordan spørger jeg Windows for størrelsen af ​​systembakkeikonerne?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har bemærket, at min app sender ikoner til Windows-bakken med en størrelse på 16x16 pixel - og min Vista-pc har jeg en dobbelt bredere proceslinje, der ser ud til at vise ikoner på 18x18. De resizing artefakter på min apps ikon ser forfærdelige ud. Hvordan kan jeg spørge Windows, hvilken størrelse ikonerne skal være?


redigere:


Jeg genererer ikonet dynamisk med en overlejring af en pixel skrifttype. Det virker spildt at generere en masse ikonstørrelser dynamisk, så det ville være rart at undgå at opbygge et ikon med alle mulige størrelser (ikke at jeg 'm selvfølgelig hvad de er).


GetSystemMetrics (SM\_CXSMICON) returnerer 16 - den forkerte værdi.


GetThemeBackgroundContentRect hjalp heller ikke.

Bedste reference


Marks kerne svar er den rigtige: Opret dine ikoner i flere formater og lad Windows vælge den rigtige. Glem ikke at gøre 32x32 og 64x64 ikoner til HighDPI scenarier.


Men SM\_CXICON/SM\_CYICON vundet 'nødvendigvis tilbage den størrelse, der vil blive brugt i proceslinjen. Opgavelinjen vælger den rigtige ikonstørrelse for størrelsen (det er meget vigtigere i vindue 7).


Bare giv ikoner med passende størrelse, og du skal være ok.

Andre referencer 1


Opret dine ikoner i flere formater, og lad Windows vælge den, den ønsker.


Her er Wikipedia artiklen på .ico-formatet. [2]


Hvis du virkelig har brug for at vide, vil GetSystemMetrics med en parameter af SM\_CXICON eller SM\_CYICON fortælle dig den bredde og højde, som Windows ønsker at indlæse. [3]

Andre referencer 2


Din bedste indsats kan være GetThemeBackgroundContentRect passerer TBN\_BACKGROUND som iPartId for bakken underrette baggrunden. [4]


GetThemeBackgroundContentRect skal returnere størrelsen defineret af det aktuelle tema, der kan bruges til tegning uden at overlappe grænserne for overordnet element. Hvis jeg læser dette korrekt, ville det være den største størrelse ikon tilladte og formodentlig den størrelse, der bliver brugt.


Testning med flere DPI-indstillinger er nok den nemmeste måde at fortælle, om dette returnerer den korrekte værdi.