2013-11-20 44 views
1

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

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

因此我的问题:

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

会创建一个隐藏的代理窗口是一个合适的解决方案?

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

+1

只是通知的隐藏窗口是要走的路,以下是我很久以前写的一些代码,它可以帮助您:http://www.codeproject.com/Articles/341/A-Task-托盘的小程序,框架 –

回答

6

你实际上在问题本身回答了你自己的问题。最好的办法是创建一个隐藏的窗口,只要需要托盘图标就可以存在。

您只需拨打Shell_NotifyIcon()一次,hWnd就会引用此隐藏窗口,并让该窗口将消息发布到需要接收它们的各个窗口。

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