多个窗口,单托盘图标

fou*_*fou 1 c windows winapi trayicon system-tray

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

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

因此我的问题:

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

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

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

ajc*_*ana 6

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

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

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