Recientemente me encontré con un problema similar. En lugar de piratear el back-end, implementé un work-around, que hace uso de BalloonTipText, que puede acomodar una gran cantidad de personajes.
La información sobre herramientas se muestra en el primer evento MouseMove sobre el icono de la bandeja y la información sobre herramientas se muestra durante 2 segundos. Después de que la información sobre herramientas esté cerrada, se puede volver a abrir nuevamente mediante un nuevo evento MouseMove.
El único inconveniente de esta solución es que no es posible cerrar el globo programáticamente, cuando un usuario, por ejemplo, abandona el área de iconos, por lo que solo desaparece después de un tiempo de espera o si el usuario hace clic en la pequeña X- botón.
Tenga en cuenta que el título y el texto se pueden establecer en cualquier momento en cualquier parte del programa. Se establecen aquí en el evento solo con fines de demostración.
EDIT:ShowBalloonTip()
incendios Además en cascada MouseMove
eventos, por lo que es necesario desactivar este evento hasta el momento en que la información sobre herramientas globo está oculto. Además, BalloonTipClosed
(según the documentation) solo se activa cuando el usuario hace clic activamente en 'X', aunque observé que se disparaba cuando la información sobre herramientas se cerraba después de un tiempo de espera. Por lo tanto, agregué un temporizador auxiliar para restablecer el estado, en lugar de confiar en el evento BalloonTipClosed
. El código revisado y probado es el siguiente:
private bool balloonTipShown;
private Timer balloonTimer;
private void trayIcon_MouseMove(object sender, MouseEventArgs e)
{
if (balloonTipShown)
{
return;
}
balloonTipShown = true;
trayIcon.MouseMove -= trayIcon_MouseMove;
balloonTimer = new Timer();
balloonTimer.Tick += balloonTimer_Tick;
balloonTimer.Interval = 2005;
balloonTimer.Start();
trayIcon.ShowBalloonTip(2000);
}
void balloonTimer_Tick(object sender, EventArgs e)
{
balloonTipShown = false;
balloonTimer.Stop();
balloonTimer.Dispose();
trayIcon.MouseMove += trayIcon_MouseMove;
}
EDIT 2: Una captura de pantalla de una información sobre herramientas globo con un buen montón de texto, que utiliza esta solución puede ser seen in by blog.
¿Algún truco para C++? –
No es necesario hackear, solo necesita establecer la macro WINVER correctamente para que el compilador sepa que al menos está apuntando a Windows 2000. –
Lo siento, quiero superar la limitación similar en 'szInfoTitle', que establece el título para un globo emergente . ¿Hay alguna solución para eso también? –