我的目标是为我的应用程序的所有窗口提供一个图标。
经过一番阅读,我的理解是通过Shell_NotifyIcon()
来创build托盘图标。 这个函数得到一个包含一个hWnd
字段的NOTIFYICONDATA
结构。 系统使用此HWND
通知相应的托盘图标事件窗口。 这些事件是通过使用SetWindowLongPtr()
在窗口上设置的WindowProc
callback来处理的。
因此我的问题是:
Shell_NotifyIcon()
多次与不同的NOTIFYICONDATA
结构,每个具有不同的hWnd
,但具有相同的图标? 将创build一个隐藏的代理窗口是一个合适的解决scheme
一些背景:我的应用程序使用C调用WinAPI(使用js-ctypes),理想情况下可以在XP上运行所有Windows版本。
你在问题中实际上回答了你自己的问题。 最好的办法是创建一个隐藏的窗口,只要你需要托盘图标存在就可以存活。
你只需要调用Shell_NotifyIcon()
一次, hWnd
引用这个隐藏的窗口,并且让这个窗口把消息发送到需要接收它们的窗口。
这也使您能够灵活地决定跳过将消息发送到特定的窗口,或者能够根据您的特定应用程序的要求向每个窗口发送不同的消息。