2013-11-20 74 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就會引用此隱藏窗口,並讓該窗口將消息發佈到需要接收它們的各個窗口。

這也使您能夠靈活地決定跳過將消息發送到特定的窗口,或者能夠根據特定應用程序的要求向每個窗口發送不同的消息。