duilib 實現鼠標移動到托盤提示消息,類似微信託盤功能

duilib 的CTrayIcon類沒有辦法獲取程序托盤pos的函數,爲此我們需要繼承該類編寫自己的類。

在windows api中

Shell_NotifyIconGetRect可以獲取托盤的pos;函數原型爲
SHSTDAPI Shell_NotifyIconGetRect(
  const NOTIFYICONIDENTIFIER *identifier,
  RECT                       *iconLocation
);

msdn參考檔案:https://docs.microsoft.com/zh-cn/windows/desktop/api/shellapi/nf-shellapi-shell_notifyicongetrect

其中NOTIFYICONIDENTIFIER類型的參數成員在 CTrayIcon創建過程中已經全部指明。 CTrayIcon::CreateTrayIcon( HWND _RecvHwnd, UINT _IconIDResource, LPCTSTR _ToolTipText, UINT _Message),把該函數的入參填入到NOTIFYICONIDENTIFIER的相應位置即可。iconLocation 輸出參數,攜帶trayicon的pose。

 

 

上述稿子一年前未完成。我說一下當時這個的解決方法吧:當鼠標處於托盤上時顯示小窗口並開啓了一個定時器來關閉它。若鼠標在小窗口內則定時器無法關閉它,若鼠標滑出小窗口時關閉小窗口和定時器。

爲什麼需要一個定時器?調整任務欄到合適位置及寬度,這樣做是爲了增大托盤與要顯示的小窗口之前的距離。這樣我們就可以觀察鼠標由托盤移動到小窗口上時,定時器對小窗口的影響。

歡迎討論!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章