2010-10-29 19 views
18

Ho entrambe le versioni scure e chiare della mia icona dell'applicazione; la versione scura funziona meglio su superfici grigie come la barra delle applicazioni di Windows XP, dove la versione light funziona al meglio come un'icona nella barra del titolo.Impostazione di un'icona diversa sulla barra delle applicazioni sull'icona visualizzata nella barra del titolo (C#)?

C'è un modo per impostare l'icona nella barra delle applicazioni su un'icona diversa da quella utilizzata nel mio modulo in C# (P/Invoke va bene)?

+1

Sono entrambi progetti separati o è un progetto e fanno si desidera impostare programatically? –

+1

È lo stesso progetto (stesso modulo) e voglio impostarlo in modo programmatico. –

+0

Ho letto qualcosa in .Net 4.0 su "Window.TaskbarItemInfo". Potrebbe essere possibile farlo tramite la proprietà overlay. – Sauleil

risposta

6

So che questa è una vecchia domanda ma l'ho trovata quando ho cercato di ottenere la stessa cosa, e beh sì, puoi farlo, almeno su Windows 7/8.

Si scopre un file ICO non si limita a contenere una sola immagine, contiene 9 immagini diverse a 9 differenti risoluzioni:

  • 16x16
  • 24x24
  • 32x32
  • 48x48
  • 64x64
  • 72x72
  • 80x80
  • 96x96
  • 128x128

In Windows 7 e 8, l'immagine 64x64 viene utilizzato sulla barra delle applicazioni, e l'immagine 16x16 viene utilizzato sull'icona che si trova in alto a sinistra del modulo.

È possibile utilizzare uno strumento come Greenfish Icon Editor Pro (non funziona per loro o altro, questa non è una spina!) Per avere queste due immagini separate, quindi aggiungere questo file *.ico normalmente al proprio Windows Form/Modulo WPF in Visual Studio.

Il risultato finale è stata di:

WPF

Come si può vedere la mia applicazione WPF ha due icone separate, uno nella barra delle applicazioni e un altro sul modulo.

+1

Beh, potrebbe esserci un numero qualsiasi di icone in un file .ico. Inoltre, questa soluzione potrebbe funzionare ma non è davvero praticamente. Inoltre: Windows non utilizza necessariamente l'icona 64x64 per visualizzare l'icona della barra delle applicazioni. Su un sistema tipico con l'impostazione dpi predefinita, un'icona 32x32 funzionerebbe. Per le scale con dpi più alti, Windows utilizzerà diverse dimensioni di icona per la barra del titolo e la barra delle applicazioni. –

+0

Inoltre, se hai modificato l'icona prima di impostarla sull'icona del modulo (ad esempio ridimensionare un'icona 32x32 su 16x16 con una qualità migliore rispetto a quella predefinita), potresti perdere tutte le altre dimensioni contenute nel file dell'icona originale.La risposta @AndreasAdler è sicuramente la migliore per la domanda che è stata posta. – MaxOvrdrv

15

Inviare il messaggio WM_SETICON al form con un'icona differente maniglie per l'ICON_SMALL e il parametro ICON_BIG:

[DllImport("user32.dll", CharSet = CharSet.Auto)] 
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, IntPtr lParam); 

private const uint WM_SETICON = 0x80u; 
private const int ICON_SMALL = 0; 
private const int ICON_BIG = 1; 

public MyForm() 
{ 
    InitializeComponent(); 

    SendMessage(this.Handle, WM_SETICON, ICON_SMALL, Properties.Resources.IconSmall.Handle); 
    SendMessage(this.Handle, WM_SETICON, ICON_BIG, Properties.Resources.IconBig.Handle); 
} 
+1

Buona risposta, +1 – JMK

+0

ottima risposta! +1 di sicuro! – MaxOvrdrv

+0

Potresti darmi qualche altra informazione? Non so come applicare questa soluzione – user1705996

Problemi correlati