修復duilib-添加托盤圖標

注:只是添加托盤圖標,不是添加托盤右鍵點擊菜單

官方duilib下載:https://github.com/duilib/duilib

在使用duilib的時候,要添加托盤圖標功能,發現不知道怎麼添加圖標。查看duilib屬性才知道在Uilib的拓展屬性window標籤裏有trayiconid屬性,值是icon的資源數字。

興奮的使用上了,發現沒效果。

然後在UIDlgBuilder.cpp中發現,windows便籤裏沒有trayiconid屬性,有一種淡淡的憂傷。沒辦法,只能自己添加。但是不知道怎麼添加。看了Redrain的仿酷狗音樂播放器的例子發現,發現這個程序可以在托盤中顯示圖標,就開始去找他的源碼怎麼寫的了。(別跟我說可以用Redrain的duilib界面庫,我用了發現跟我這個項目有衝突的地方太多,出現的錯誤太多了,因爲庫的差異,Redrain的界面是自己維護的修復了duilib原有的bug也比較早了。還有就是添加功能,我覺得永遠比改來的爽)。最後找到了源碼解決這個問題,對比Redrain的Uilib庫。

注:我倒着找到解決辦法修復

解決辦法:
1.我在Redrain的Uilib庫中UIDlgBuilder.cpp找到window標籤比對屬性的地方,添加

else if (_tcsicmp(pstrName, _T("trayiconid")) == 0){
                            if (_ttoi(pstrValue) > 0)
                            {
                                pManager->GetTrayObject().CreateTrayIcon(pManager->GetPaintWindow(), _ttoi(pstrValue));
                            }
                        }

添加後編譯duilib庫,發現有錯,GetTrayObject()沒有定義,也不知道CreateTrayIcon()這個方法在不在。

2.我們先去找官方的duilib裏CreateTrayIcon在不在,發現TrayIcon.cpp裏有這個函數。不過在Redrain的Uilib庫中,在DuiTrayIcon.cpp中實現的。

然後在UIManager.h 添加 CTrayIcon &GetTrayObject();方法和CTrayIcon mDuiTray;變量

實現GetTrayObject()方法

CTrayIcon& CPaintManagerUI::GetTrayObject()
    {
        return mDuiTray;
    }

3.最後在xml文件的window標籤中添加trayiconid屬性,它的值是資源文件中的你要顯示圖標的數值。

最後:問題解決了,托盤圖標可以顯示了。添加托盤提示信息也是如此,在此就不重複了。
有什麼問題及時聯繫我,謝謝!

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