多个窗口,单托盘图标

时间:2013-11-20 10:32:32

标签: c windows winapi system-tray trayicon

我的目标是为我的应用程序的所有窗口设置一个图标。

经过一些阅读后,我的理解是通过Shell_NotifyIcon()创建托盘图标。此函数获得NOTIFYICONDATA结构,其中包含hWnd字段。系统使用此HWND来通知托盘图标事件的相应窗口。这些事件由在WindowProc窗口上设置的SetWindowLongPtr()回调处理。

因此我的问题是:

  • 单个图标如何通知我的应用程序的所有窗口,例如鼠标左键单击?
  • 我可以Shell_NotifyIcon()多次使用不同的NOTIFYICONDATA结构,每个结构都有不同的hWnd,但图标相同吗?
  • 如果注册创建托盘图标的原始窗口被销毁怎么办?

创建隐藏代理窗口是否适合作为解决方案?

一些背景知识:我的应用程序使用C调用WinAPI(使用js-ctypes),理想情况下应该适用于XP上的所有Windows版本。

1 个答案:

答案 0 :(得分:6)

你几乎在问题本身中回答了你自己的问题。最好的办法是创建一个隐藏的窗口,只要您需要托盘图标存在,该窗口就能存活下来。

您只需在Shell_NotifyIcon()引用此隐藏窗口时调用hWnd,并让此窗口将消息发布到需要接收它们的各个窗口。

这也使您能够灵活地决定跳过向特定窗口发送消息,或者能够向每个窗口发送不同的消息,具体取决于您的特定应用程序的要求。