zoukankan      html  css  js  c++  java
  • GDI不规则圆弧菜单控件----------WinForm控件开发系列

    效果图:

    该控件两个版本:早期(控件版)和后期(窗体版)。

    (控件版)

    控件版指控件只能在窗体容器或其他的容器控件中使用,因为它属于普通控件级别,而且无法实现透明背景。

    该控件是继承于 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 事件也取消了。

    控件库的源码已整体发布到gitee,下载地址:(花木兰控件库)https://gitee.com/tlmbem/hml

  • 相关阅读:
    java实现第三届蓝桥杯拼音字母
    java实现第三届蓝桥杯数据压缩
    java实现第三届蓝桥杯数据压缩
    java实现第三届蓝桥杯数据压缩
    java实现第三届蓝桥杯数据压缩
    java实现第三届蓝桥杯数据压缩
    Jackson工具类(各种转换)
    Jackson转换JSON例子
    Jackson的用法实例分析
    SpringMVC 封装返回结果对象
  • 原文地址:https://www.cnblogs.com/tlmbem/p/11368044.html
Copyright © 2011-2022 走看看