我的目标是为我的应用程序的所有窗口使用一个图标。
经过一番阅读,我的理解是创建托盘图标是通过Shell_NotifyIcon()
实现的。此函数获取一个 NOTIFYICONDATA
结构,其中包含一个 hWnd
字段。这个HWND
是系统用来通知相应窗口托盘图标事件的。这些事件由使用 SetWindowLongPtr()
在窗口上设置的 WindowProc
回调处理。
因此我的问题是:
- 单个图标如何通知我的应用程序的所有窗口单击鼠标左键?
- 我可以使用不同的
NOTIFYICONDATA
结构多次Shell_NotifyIcon()
吗?每次都有不同的hWnd
,但具有相同的图标? - 如果注册创建托盘图标的原始窗口被破坏怎么办?
创建一个隐藏的代理窗口是否是一个合适的解决方案?
一些背景:我的应用程序使用 C 调用 WinAPI(使用 js-ctypes),理想情况下应该适用于从 XP 开始的所有 Windows 版本。
最佳答案
您几乎在问题本身中回答了您自己的问题。最好的办法是创建一个隐藏窗口,只要您需要托盘图标,它就会一直存在。
您只需调用一次 Shell_NotifyIcon()
并使用 hWnd
引用此隐藏窗口,并让此窗口将消息发布到需要接收它们的各个窗口.
这也使您能够灵活地决定跳过向特定窗口发送消息,或者能够向每个窗口发送不同的消息,具体取决于您的特定应用程序的要求。
关于c - 多个窗口,单个托盘图标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20093454/