效果圖:
該控件兩個版本:早期(控件版)和后期(窗體版)。
(控件版)
控件版指控件只能在窗體容器或其他的容器控件中使用,因為它屬於普通控件級別,而且無法實現透明背景。
該控件是繼承於 Control 基類開發的。該控件目前沒有使用彈層實現,你可以繼續優化該控件。該控件目前使用的定時器過多,這部分以后也是需要優化的。
該控件的UI界面構思是參考JavaScript插件做出來的,該控件能夠添加 Items 屬性添加指定數量圓弧,每個圓弧都可以設置獨自的顏色、文本、還有單擊事件。該控件功能包括 (圓弧左鍵單擊事件、圓心右鍵單擊縮放效果、鼠標經過圓弧震動回彈效果、圓弧旋轉效果)。
該控件1.0版本時使用的時候會占用CPU2%左右得資源,有些人會覺得他誇張了,確實會這樣。這是因為這個控件的動畫繪制次數過度頻繁,把這個控件的自動旋轉功能關閉,就不會太占用CPU的資源了,自由在鼠標滑過控件觸發動畫時才會占用CPU資源。這是正常,因為這些動畫都是用CPU來執行的。可能這就是為什么微軟自帶的控件庫沒有華麗控件的原因。其實我也反編譯過一些第三方商業控件庫例如像DotNetBar、DevExpress 這些控件庫,他們一些華麗點的控件也是很占用CPU資源的。
現在控件是3.0版本 ,當前版本CPU使用率在4%左右,旋轉動畫開啟后再6%,我檢查了下代碼發現是有一個很深的Bug在里面。這可能是因為每個圓弧選項震動、旋轉的動畫都各自分配獨立的定時器,導致跟新頻繁造成。(窗體版)優化了下性能。
Items 集合屬性存放歡呼的信息,第一個為圓心。
重寫的方法如下
新增的類如下
新增屬性如下
(窗體版)
窗體版實在原有的控件版基礎上修改而來,增加了控件的實用性。其中改進包括:
1.窗體版主要利用了窗體的分層技術實現了控件能以浮動層的形式在窗體以外的區域顯示該控件。
2.窗體版主要利用了窗體的分層技術實現了控件的背景透明功能和抗鋸齒。
3.優化了定時器數量。
4.修復一些已知問題。
控件主要由三部分組成,這三部分分別為
RadianMenuExtView 繼承 Control 不規則圓弧菜單控件句柄
RadianMenuExtComponent 繼承 Component 不規則圓弧菜單控件
RadianMenuLayer 繼承 Form 圓弧菜單彈層
控件使用范圍分為窗體和屏幕
窗體使用到 RadianMenuExtView 、 RadianMenuExtComponent 、 RadianMenuLayer
屏幕使用到 RadianMenuExtComponent 、 RadianMenuLayer
RadianMenuExtView 控件的 Rmec 屬性設置 RadianMenuExtComponent 分層控件,那么 RadianMenuExtComponent 控件使用范圍屬於窗體,否則屬於屏幕。
RadianMenuExtComponent 組件的用途相當於保存圓弧菜單控件的一些信息,因為圓弧菜單UI界面是通過 RadianMenuLayer 來模擬顯示顯示的,RadianMenuLayer 的 OnPaint 事件也取消了。
源碼下載:GDI不規則圓弧菜單控件.zip