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。
上述稿子一年前未完成。我說一下當時這個的解決方法吧:當鼠標處於托盤上時顯示小窗口並開啓了一個定時器來關閉它。若鼠標在小窗口內則定時器無法關閉它,若鼠標滑出小窗口時關閉小窗口和定時器。
爲什麼需要一個定時器?調整任務欄到合適位置及寬度,這樣做是爲了增大托盤與要顯示的小窗口之前的距離。這樣我們就可以觀察鼠標由托盤移動到小窗口上時,定時器對小窗口的影響。
歡迎討論!!