2009-01-20 20 views
9

He creado una aplicación que se ejecuta en la barra de tareas. Cuando un usuario hace clic en la aplicación, aparece, etc. Lo que me gustaría es una funcionalidad similar a la de MSN cuando uno de mis amigos inicia sesión. ¿Aparentemente esto se conoce como una ventana emergente? Básicamente quiero que aparezca algo emergente cada 20 minutos en el estilo de la aplicación en la barra de tareas.ventana emergente estilo tostada para mi aplicación

Mi aplicación existente se basa winforms escrito en C# con .NET 3.5

Saludos

Respuesta

21

Esto es bastante simple. Solo necesita configurar la ventana en el área fuera de la pantalla y animar su posición hasta que esté completamente visible. Aquí es un ejemplo de código:

public partial class Form1 : Form 
{ 
    private Timer timer; 
    private int startPosX; 
    private int startPosY; 

    public Form1() 
    { 
     InitializeComponent(); 
     // We want our window to be the top most 
     TopMost = true; 
     // Pop doesn't need to be shown in task bar 
     ShowInTaskbar = false; 
     // Create and run timer for animation 
     timer = new Timer(); 
     timer.Interval = 50; 
     timer.Tick += timer_Tick; 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     // Move window out of screen 
     startPosX = Screen.PrimaryScreen.WorkingArea.Width - Width; 
     startPosY = Screen.PrimaryScreen.WorkingArea.Height; 
     SetDesktopLocation(startPosX, startPosY); 
     base.OnLoad(e); 
     // Begin animation 
     timer.Start(); 
    } 

    void timer_Tick(object sender, EventArgs e) 
    { 
     //Lift window by 5 pixels 
     startPosY -= 5; 
     //If window is fully visible stop the timer 
     if (startPosY < Screen.PrimaryScreen.WorkingArea.Height - Height) 
      timer.Stop(); 
     else 
      SetDesktopLocation(startPosX, startPosY); 
    } 
} 
+5

T Esto no tiene en cuenta varios factores: * La barra de tareas se puede unir a cualquier borde de la pantalla; * El usuario podría tener un monitor secundario a la derecha (haciendo que su ventana emergente no aparezca cerca de la barra de tareas. Sé que este es un hilo antiguo, pero quería mencionarlo para cualquier otra persona que lo mire, como yo. – Geoff

+3

Adición a mi comentario anterior: aunque parece que tener una pantalla secundaria no debería ser un problema (debido al uso de Screen.PrimaryScreen), Win7 permite que las pantallas no primarias contengan la barra de tareas, y por supuesto, la ubicación de la barra de tareas aún podría Sea cualquier borde de la pantalla. Consulte [esta pregunta] (http://stackoverflow.com/questions/1265379/how-to-find-windows-taskbar-location-and-size) para obtener una respuesta para encontrar el borde correcto para la barra de tareas. – Geoff

4

Hay apoyo para los globos de notificación en Win32 (no soy un programador .net), con algunas propiedades útiles como old new thing explains.

También hay un aspecto general del sistema que debe bloquear para evitar que aparezca más de una ventana emergente de cualquier aplicación a la vez.

Hay un par de páginas sobre el tema de tostadas en msdn - the toast semaphor y en el broader context of usability. También me encontré con example code para usar la aplicación de globos desde C# mientras miraba, pero no puedo responder.

-1

Va a mover el formulario fuera de la pantalla hacia la derecha y luego lo levanta. Nunca subiría a la vista de escritorio. El eje X está a la derecha e izquierda, el eje Y está arriba y abajo. Agregar al eje X lo hace ir más a la derecha, y agregarlo al eje Y lo hace ir más abajo.

Cuestiones relacionadas