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 事件也取消了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现