如何随意隐藏任务栏气泡?

3
很容易强制任务栏图标显示气球提示:只需要在调用Shell_NotifyIcon(NIM_MODIFY,...)时设置NIF_INFO标志即可,气球就会出现,没有问题。
现在,我还想能够在不再需要气球时隐藏它,但我找不到方法。我尝试清除NIF_INFO标志并调用Shell_NotifyIcon(NIM_MODIFY,...),但气球仍然保留着。它确实会在几秒钟后自动消失,但这不是我想要的:当我的程序认为它应该被隐藏时,我想立即将其隐藏。
让气球消失的唯一方法似乎是销毁图标,然后将其再次添加到任务栏,但这很丑陋。
有没有可能在不重新创建任务栏图标的情况下隐藏气球?谢谢。
2个回答

4

要立即隐藏气球,将 NOTIFYICONDATAszInfo 成员设置为空字符串,例如 nid.szInfo[0] = 0; 并调用 Shell_NotifyIcon(NIM_MODIFY, &nid)


3
我认为强制移除通知气球并不符合用户的最佳利益。有时候,用户不能立即查看通知,而气球在几秒钟内慢慢消失给了他们一个查看的机会。从可用性的角度来看,显示气球应该是应用程序的责任,但删除气球应该是用户的责任。否则,您可能会隐藏他们真正感兴趣的信息,并通过立即强制隐藏它,完全消除了用户在气球消失期间的“最后机会”。

你说得没错,在某些情况下,为了给用户时间来查看,气球应该保持在原地,但是有很多情况下,去掉气球会提供更好的体验。例如,假设我想告知用户我的程序正在尝试连接到服务器。连接可能只需要一秒钟,此后保持“正在连接到服务器…”气球就没有意义了。事实上,这可能会让用户感到困惑:连接已经建立,但气球仍然显示“正在连接…”,难道程序出了问题吗? - Andrei Belogortseff
4
所以与其隐藏气球...不如将其文本更改为“已连接”,并仍允许用户自行关闭。;) - jrista
气球应仅用于通知非关键事件。当与Exchange服务器的连接丢失并且在指定时间内未恢复时,MS Outlook会显示一个气球,然后在恢复连接时显示一个气球。如果用户错过它,也不会发生什么不好的事情,对吧?如果尝试连接需要多次尝试,则显示气球以通知您的应用程序可能非常烦人。但是,您可以更改图标,以便用户看到您的应用程序正在连接到服务器,并在用户悬停在图标上时更新显示的状态。 - Alexey Ivanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接