2010-10-29 18 views
18

Tengo versiones oscuras y claras del icono de mi aplicación; la versión oscura funciona mejor en superficies grises, como la barra de tareas de Windows XP, donde la versión ligera funciona mejor como icono en la barra de título.¿Configurando un ícono diferente de la barra de tareas al icono que se muestra en la barra de título (C#)?

¿Hay alguna manera de configurar el ícono en la barra de tareas en un ícono diferente al utilizado en mi formulario en C# (P/Invoke está bien)?

+1

¿Son los dos proyectos separados o se trata de un proyecto y hacer que desea establecer mediante programación? –

+1

Es el mismo proyecto (la misma forma) y quiero configurarlo programáticamente. –

+0

Leí algo en .Net 4.0 sobre el "Window.TaskbarItemInfo". Podría ser posible hacerlo a través de la propiedad de superposición. – Sauleil

Respuesta

6

Sé que esta es una vieja pregunta, pero me encontré con esto cuando trato de lograr lo mismo, y bueno, sí puedes hacerlo, al menos en Windows 7/8.

Resulta un archivo ICO no sólo contiene una imagen, que contiene 9 imágenes diferentes a los 9 resoluciones diferentes:

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

En Windows 7 y 8, la imagen de 64x64 se utiliza en la barra de tareas, y la imagen de 16x16 se utiliza en el icono que se coloca en la esquina superior izquierda de su formulario.

Puede usar una herramienta como Greenfish Icon Editor Pro (no trabajo para ellos ni nada, esto no es un enchufe!) Para tener esto como dos imágenes separadas, y luego agregue este archivo *.ico de forma normal a su Windows Formulario/WPF formulario en Visual Studio.

El resultado final se muestra a continuación:

WPF

Como se puede ver mi aplicación WPF tiene dos iconos separados, uno en la barra de tareas y otro en el formulario.

+1

Bueno, podría haber cualquier número de iconos en un archivo .ico. Además, esta solución podría funcionar pero no es realmente práctica. Además: Windows no utiliza necesariamente el icono de 64x64 para mostrar el ícono de la barra de tareas. En un sistema típico con la configuración predeterminada de dpi, un ícono de 32x32 funcionaría. Para escalas de dpi más altas, Windows usará diferentes tamaños de iconos para la barra de título y la barra de tareas. –

+0

también, si modificó su ícono antes de configurarlo en el ícono de su formulario (como cambiar el tamaño de un ícono de 32x32 a 16x16 con mejor calidad que el tamaño predeterminado), puede perder todos los demás tamaños que contiene su archivo de ícono original.La respuesta de @AndreasAdler es definitivamente la mejor para la pregunta que se hizo. – MaxOvrdrv

15

Enviar el mensaje WM_SETICON a su formulario con diferentes icono de asas para la ICON_SMALL y el parámetro 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

Buena respuesta, +1 – JMK

+0

¡excelente respuesta! +1 seguro! – MaxOvrdrv

+0

¿Podría darme más información? No sé cómo aplicar esta solución – user1705996

Cuestiones relacionadas