2011-05-11 34 views
6

Quiero mostrar un ícono [a .ico file] en la bandeja del Sistema con algún texto agregado en el tiempo de ejecución. ¿Hay alguna forma nativa de WPF para hacerlo? o un fragmento de GDI + también estaría agradecido.¿Cómo agregar texto al icono en C#?

Gracias.

+0

Estoy bastante seguro de la bandeja del sistema no es compatible con el texto :), Tal como Tho punta de la herramienta. – Aren

+0

Los iconos de la bandeja del sistema son pequeños. ¿Cuánto texto esperas que quepa en uno? – Gabe

+0

Solo dos dígitos ... – iraSenthil

Respuesta

5

Este es el código que trabajó para mí,

public static Icon GetIcon(string text) 
{ 
    //Create bitmap, kind of canvas 
    Bitmap bitmap = new Bitmap(32, 32); 

    Icon icon = new Icon(@"Images\PomoDomo.ico"); 
    System.Drawing.Font drawFont = new System.Drawing.Font("Calibri", 16, FontStyle.Bold); 
    System.Drawing.SolidBrush drawBrush = new System.Drawing.SolidBrush(System.Drawing.Color.White); 

    System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap); 

    graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel; 
    graphics.DrawIcon(icon, 0, 0);    
    graphics.DrawString(text, drawFont, drawBrush, 1, 2); 

    //To Save icon to disk 
    bitmap.Save("icon.ico", System.Drawing.Imaging.ImageFormat.Icon); 

    Icon createdIcon = Icon.FromHandle(bitmap.GetHicon()); 

    drawFont.Dispose(); 
    drawBrush.Dispose(); 
    graphics.Dispose(); 
    bitmap.Dispose(); 

    return createdIcon; 
} 
+0

Puede cambiar una línea a Bitmap bitmap = new Bitmap (icon.Width, icon.Height); –

0

Como los iconos de la bandeja del sistema no tienen texto que los acompañe, puede superponer el texto en el icono o utilizar una ventana emergente emergente.

La superposición de texto (probablemente incrustándolo en un icono generado de forma procedural) sería muy complicado, pero lo más importante es probablemente una mala idea, ya que los iconos se utilizan mejor para mostrar información de estado categórico, con información más detallada disponible en pop texto emergente o una ventana emergente.

Por ejemplo, si un icono representa el estado de la bandeja de entrada, es suficiente mostrar "nuevo correo" versus "sin correo nuevo", sin necesidad de mostrar la cantidad de correos nuevos. Eso permite que se muestre un icono más claro que no necesita ser descifrado en detalle por el usuario.

Un área más gris es un icono que indica un estado del proceso. Podrías tener iconos "en progreso" versus "completos", pero he visto íconos con barras de progreso incrustadas en ellos, que pensé que era una manera ordenada de hacerlo. Obviamente, una barra de progreso en un ícono diminuto no muestra realmente datos numéricos precisos, y puede estar más cerca de expresar datos categóricos (no realizados en absoluto, hechos a tiempo parcial, completos) dependiendo de la resolución.

Si decide seguir este enfoque, entonces este enlace debe ayudar:

  • Code Project article que muestra cómo cambiar un icono, show de texto emergente y una ventana emergente usando WPF.

Si aún sientes que tu caso de uso amerita que se superponga el texto en un ícono, entonces creo que la manera de hacerlo es generar el icono proceduralmente. Creo que primero deberá agregar el texto a una imagen y luego convertirlo en un ícono. Estos enlaces le deben ayudar con eso:

+1

¿Por qué crees que generar un icono sobre la marcha con texto es una mala idea? Aún no respondiste a mi pregunta sobre cómo agregar texto en el ícono. :( – iraSenthil

+0

Creo que generalmente es una mala idea porque los iconos se usan mejor para mostrar información categórica en lugar de datos numéricos precisos. Actualizaré mi respuesta para aclarar esto, y añadiré algunos consejos para la creación de íconos de procedimiento si aún quieres ir adelante con él. – Ergwun

+3

Creo que nada es malo si mejora la experiencia del usuario – iraSenthil

Cuestiones relacionadas