天天看點

duilib 使用圖檔素材或者算法給窗體增加陰影(源碼和demo)

         之前我寫的程式使用陰影時,一直是使用codeproject網站上的WndShadow類,并且把它當作單獨的子產品來使用,後來覺得使用陰影的情況非常多,是以今天就把這個類改寫了一下,讓他融入到duilib,并且可以直接使用xml來描述陰影,不需要寫任何c++代碼。

        以前的WndShadow類是用算法來計算陰影,靈活性很大,但是缺點就是效果不夠理想,是以我另外給他附加了使用圖檔素材來貼陰影的功能。最終的新類名為CShadowUI。這個類可以單獨使用,我把他內建到了自己的庫裡。為了融合到Duilib我修改了UiLib.h檔案、UIDlgBuilder.cpp檔案、UIManager.h檔案、UIManager.cpp檔案。

        先貼兩張效果圖,以下是素材陰影和算法陰影的效果圖:

duilib 使用圖檔素材或者算法給窗體增加陰影(源碼和demo)
duilib 使用圖檔素材或者算法給窗體增加陰影(源碼和demo)

        通過設定xml的Window标簽可以添加陰影,陰影的xml屬性描述如下:

        前面的兩個效果圖的對應xml描述如下:

源碼:

       UIShadow.h源碼為:

       UIShadow.cpp源碼為:

總結:

      這個陰影使用雙層窗體實作的,可以避免duilib在半透明窗體上的不足。但也由于使用雙層窗體,導緻窗體大小快速改變時會看出陰影改變的延遲 ,能不能接受這個延遲就看個人了,是以如果是固定大小的窗體使用陰影效果最好。具體的效果可以看我的demo。

繼續閱讀