2009-02-20 11 views
9

Ho notato che la mia app invia icone alla barra di Windows con una dimensione di 16x16 pixel e il mio PC Vista ha una barra delle applicazioni a doppio livello che sembra mostrare icone a 18x18. Gli elementi di ridimensionamento sull'icona della mia app sembrano orribili. Come posso chiedere a Windows quali dimensioni dovrebbero essere le icone?Come posso chiedere a Windows le dimensioni delle icone della barra delle applicazioni?

edit:

che sto generando l'icona in modo dinamico, con una sovrapposizione di testo pixel font. Sembra inutile generare dinamicamente un mucchio di icone di dimensioni, quindi sarebbe bello evitare di costruire un'icona con tutte le dimensioni "possibili" (non che io sia sicuro di cosa siano).

GetSystemMetrics (SM_CXSMICON) restituisce 16 - il valore errato.

Anche GetThemeBackgroundContentRect non ha aiutato.

risposta

0

Crea le tue icone in più formati e lascia che sia Windows a selezionare quello desiderato.

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

Se si ha realmente bisogno di sapere, GetSystemMetrics con un parametro di SM_CXICON o SM_CYICON vi dirà la larghezza e l'altezza che Windows vuole caricare.

+3

La prima metà di questa risposta è semplicemente sbagliata. L'API per le icone di notifica è 'Shell_NotifyIcon'. Questo riceve un 'NOTIFYICONDATA' che contiene un' HICON'. Ora, un 'HICON' si riferisce ad una singola icona, quindi devi decidere la dimensione prima di chiamare' Shell_NotifyIcon'. L'ultimo paragrafo è preciso però. –

1

La risposta principale di Mark è quella giusta: crea le tue icone in più formati e lascia che Windows scelga quello giusto. Non dimenticare di fare icone 32x32 e 64x64 per scenari HighDPI.

Ma SM_CXICON/SM_CYICON non restituirà necessariamente la dimensione che verrà utilizzata nella barra delle applicazioni. La barra delle applicazioni sceglie la giusta dimensione dell'icona per la sua dimensione (questo è molto più importante in Window 7).

Basta fornire icone di dimensioni appropriate e si dovrebbe essere ok.

+2

Suppongo che avrei dovuto dire: sto generando l'icona in modo dinamico, con una sovrapposizione di testo font pixel. Sembra inutile generare dinamicamente un mucchio di icone di dimensioni. GetSystemMetrics (SM_CXSMICON) restituisce 16 - il valore errato di nuovo. – keelo

+1

Sfortunatamente quell'informazione non cambia la mia risposta - è ancora necessario produrre più dimensioni di icona. O semplicemente produci un'icona 256x256 e lascia che il sistema lo riduca in scala per te. –

+1

Generare un 256x256 con i font pixel risulterà in testo illeggibile quando l'icona viene ricampionata su 16x16, sfortunatamente. – keelo

0

La tua migliore scommessa potrebbe essere GetThemeBackgroundContentRect passando TBN_BACKGROUND come iPartId per lo sfondo di notifica del vassoio.

GetThemeBackgroundContentRect deve restituire la dimensione definita dal tema corrente che può essere utilizzata per il disegno senza sovrapposizione dei bordi dell'elemento padre. Se sto leggendo questo correttamente, quella sarebbe l'icona di notifica più grande consentita e presumibilmente la dimensione che viene utilizzata.

Il test con più impostazioni DPI è probabilmente il modo più semplice per stabilire se questo sta restituendo il valore corretto.

+3

GetThemeBackgroundContentRect con TBN_BACKGROUND non ha subito variazioni con la modifica delle dimensioni dell'icona del vassoio. – keelo

Problemi correlati