我希望能够用用户数据(ID或void *)标记每个气球,因此当我收到一个NIN_BALLOONUSERCLICK
时,我可以识别哪个气球被点击并执行一个有意义的操作。据我所知,这是不可能的,因为NOTIFYICONDATA
结构。有没有一种方法可以使用NIF_INFO为Shell_NotifyIcon指定用户数据?
回答
据我所知,这是不可能给出的
NOTIFYICONDATA
结构
这是正确的。在Shell_NotifyIcon()
API中没有关于将用户定义的数据与通知关联的条款。
但是,由于无论如何您一次只能显示一个气球,因此您可以将数据存储在某个位置,然后在气球解散时检索它。如果您有多个通知,请使用某种类型的堆栈来存储数据,然后让气球从堆栈中弹出数据。
另一种选择是在使用NIF_MESSAGE
标志时为每个单独的气球使用不同的uCallbackMessage
值,然后让窗口消息处理程序根据需要区分消息标识。例如,如果你有一个数据阵列,你可以选择一个唯一的基本消息ID(可能从RegisterWindowMessage()
并添加数组索引到它)
您的第一个建议可能会工作,但我认为操作系统保留在通知显示过多请求时不显示通知的权利,也许您仍然可以获取所有通知被拒绝/关闭的电话号码 您的第二个解决方案可能工作,我不得不看看是不是一个全局的消息ID存储整个通知图标或如果它是每个气球。此外,你可能会用完信息ID(与RegisterWindowMessage或其他),除非你能够回收它们,这可能会导致无意中回应新的通知老事件。 – cppguy
从文档中,多个气球排队,它们应该一个接一个地显示,并且您应该为每个气球获得'NIN_BALLOONSHOW'和'NIN_BALLOON(HIDE | TIMEOUT | USERCLICK)'。除非“相当时间”处于活动状态,否则除非您指定'NIIF_RESPECT_QUIET_TIME'标志,否则您将得不到任何东西,如果您在“安静时间”期间尝试显示气球,您将获得“NIN_BALLOONHIDE”。 –
'Shell_NotifyIcon()'可以让你为每个通知指定一个不同的'uCallbackMessage' ID。我并不是建议你为每个通知调用RegisterWindowMessage(),我建议你一次**调用它**来获得一个基本ID,然后你可以在每个通知上添加一个偏移量。 –
- 1. 有没有一种方法可以指定使用PHP的源UDP端口?
- 2. Python argparse:有没有一种方法可以用nargs指定一个范围?
- 3. 有没有一种方法可以一次使用Sequelize
- 4. 有没有一种方法可以用模式指定gradle源集?
- 5. 有没有一种方法可以为Google AreaChart指定阴影区域?
- 6. 有没有一种方法可以在Android中为字体指定“权重”?
- 7. 有没有一种方法可以在Polymer.js中使用Slick-Carousel?
- 8. 有没有一种方法可以在Linux上使用C++
- 9. 有没有一种方法可以使用书签排序gmail?
- 10. ejabberd:有没有一种方法可以确定用户是否是管理员?
- 11. 有没有一种方法可以在Python中为lxml指定一个固定(或可变)数量的元素
- 12. 有没有一种方法可以防止用户输入数字()
- 13. 有没有一种方法可以在TestNG suite.xml中为包含的方法指定参数?
- 14. 有没有一种方法来读取使用数据流
- 15. 有没有一种方法可以在直播网站上使用drawWindow()方法?
- 16. 有没有一种方法可以用Javascript进行验证?
- 17. 有没有一种方法可以计算特定用户在关系型MySQL表中存储的数据量
- 18. 有没有一种方法可以在HTML/JavaScript中指定多个图像源?
- 19. 有没有一种方法可以在Ruby中指定多步骤?
- 20. 有没有一种方法可以使用LINQ语句来计算行数?
- 21. 有没有一种方法可以将网页转换为pdf?
- 22. 有没有一种方法可以为wordpress.com配置mathjax?
- 23. 有没有一种方法可以有一个桶指针? (C/C++)
- 24. 有没有一种方法可以像使用数据库中的WHERE LIKE sql一样使用Zend Search Lucene?
- 25. 有没有什么方法可以使用'unset'作为方法?
- 26. 有没有一种方法可以投射闭包的参数?
- 27. 流星 - 有没有一种方法可以让div可用双向数据绑定工作?
- 28. 有没有一种方法可以指定适用于大多数开发平台的make文件?
- 29. 有没有一种方法可以在调用boost :: bind对象时明确指定模板参数?
- 30. 当hibernate使用ehcache时,有没有一种方法可以指定通配区域名称?
API中没有规定 - 你必须滚动你的自己的解决方案 –