2009-05-23 15 views
3

Il est très facile de forcer une icône de la barre des tâches à afficher une info-bulle: tout ce que je dois faire est de définir le drapeau NIF_INFO lorsque j'appelle Shell_NotifyIcon (NIM_MODIFY, ...), et le ballon apparaît.Comment cacher un ballon de la barre des tâches à volonté?

Maintenant, je veux pouvoir cacher le ballon quand je n'en ai plus besoin, mais je n'arrive pas à le faire. J'ai essayé d'effacer le drapeau NIF_INFO et d'appeler Shell_NotifyIcon (NIM_MODIFY, ...), mais le ballon est resté. Il disparaît tout seul, quelques secondes plus tard, mais ce n'est pas ce que je veux: je veux le cacher tout de suite, quand mon programme pense qu'il devrait être caché. La seule façon de faire disparaître le ballon semble être de détruire l'icône, puis de l'ajouter à la barre des tâches, mais c'est moche.

Est-il possible de masquer le ballon sans recréer l'icône de la barre des tâches? Merci.

Répondre

4

Pour masquer immédiatement un ballon, le paramétre szInfo du NOTIFYICONDATA à une chaîne vide, comme nid.szInfo[0] = 0; et appellent Shell_NotifyIcon(NIM_MODIFY, &nid).

+0

Ne semble pas fonctionner sur Windows 10. – Paul

3

Je voudrais offrir qu'il n'est pas vraiment dans le meilleur intérêt de l'utilisateur de supprimer de force un ballon de notification. Parfois, un utilisateur ne regarde pas une notification immédiatement, et cette disparition lente qui se produit en quelques secondes lui donne l'occasion de jeter un coup d'œil avant que le ballon soit parti. Du point de vue de la convivialité, l'affichage du ballon devrait être la responsabilité de l'application, mais le retrait du ballon devrait être la responsabilité de l'utilisateur. Dans le cas contraire, vous pourriez cacher des informations qu'ils étaient réellement intéressés à voir, et en les cachant de force immédiatement, vous supprimez complètement cette «dernière chance» que l'utilisateur a lors de la disparition des ballons.

+0

Vous avez raison de dire que, dans certains cas, le ballon doit rester en place pour permettre à l'utilisateur de le consulter, mais il y a de nombreux cas dans lesquels l'enlèvement du ballon devrait fournir une meilleure expérience. Par exemple, supposons que je souhaite informer l'utilisateur que mon programme tente de se connecter à un serveur. La connexion peut prendre une seconde, après quoi il ne sert à rien de garder le ballon "Connexion au serveur ...". En fait, cela peut perturber l'utilisateur: la connexion a déjà été faite, mais le ballon dit "se connecter ...", y a-t-il quelque chose qui ne va pas dans le programme? –

+4

Alors plutôt que de cacher le ballon ... changez son texte pour dire "Connecté". et permettent toujours à l'utilisateur de le fermer par ses propres moyens. ;) – jrista

+0

C'est une bonne idée, merci! –