转载请说明原出处,谢谢~~:
第一部分
我在前一段时间研究了怎么制作duilib的菜单,花了几天时间以MenuDemo为基础做出个duilib的菜单以备自用,近些天在群里经常会碰到群友问如何给MenuDemo增加消息响应,为了避免重复的回答我特意写这篇日志,希望可以帮到需要之人,同时也介绍了如何美化菜单的效果、动态修改自身的状态以及通过增加属性来优化菜单的xml文件编写过程,先截个图展示一下效果。
本菜单的优点如下:
1、可以展现多级菜单
2、可内嵌自定义控件,并且控件可以向主窗体发送消息,如图的红色叹号就是个按钮控件,可以制作酷狗音乐的托盘菜单的播放暂停按钮和进度控制进度条。
3、菜单拥有阴影效果
4、菜单可以自定义前方显示小图标,并且可以控制图标的大小和是否显示
5、菜单可以根据是否拥有子菜单决定是否显示小箭头
6、菜单可以添加分割线
7、每个菜单项都可以实现check菜单的功能,而且check信息会被保存下来以备下次显示
8、优化菜单的xml描述文件,编写方便容易,如果要写一个二级菜单,比如编写图片中的菜单测试4以及他的子菜单,只需如下代码就可以了
9、可以通过键盘的按钮控制菜单的选项
10、每个菜单项的高度宽度是任意调整的
<MenuElement text="菜单测试4" icon="right.png" iconsize="9,9" expland="true" ><MenuElement text="菜单测试5" expland="true" icon="WebSit.png" iconsize="16,16"><MenuElement text="菜单测试6" icon="Virus.png" iconsize="16,16"/><MenuElement text="菜单测试7" /></MenuElement><MenuElement text="菜单测试8" expland="true"><MenuElement text="菜单测试a" /><MenuElement text="菜单测试b" /></MenuElement></MenuElement> 第二部分
菜单介绍完了,先说说我的开发过程的准备阶段。
大家知道duilib库是个非常棒的开源库,,我个人很喜欢他,但是由于现在作者不维护了,导致现在库中存在的bug无人料理,控件也相对不足,而菜单控件是软件开发中常用的,duilib库中虽然给出了MenuDemo,但是没有增加消息响应,导致一些朋友不会使用他,我开始也是这样,所以打算自己给duilib做一个菜单。
我接触到的和duilib有关的菜单的例子有:原带的MenuDemo、Alberl写的简易Menu、ListDemo中的MenuWnd、其他库的已经编写成熟的Menu.
我找了很多Menu的代码,看了看他们的实现方法。我在这里简单的说一下他们的优缺点:
原带的MenuDemo:
优点:1、实现了多级菜单
2、内嵌自定义控件
缺点:1、无消息响应功能
2、菜单的xml描述文件过于繁琐,在其中实现小箭头或者小图标都要靠自己的布局来实现,这点大家可以看他的xml文件。
Alberl写的简易Menu和ListDemo中的MenuWnd:
优点:1、使用简单方便
2、外观效果很好
缺点:1、只是一级菜单,无法满足很多需要多级菜单的场合
2、没有封装为菜单类,无法通过调节属性来控制菜单的效果
接受失败等于回归真实的自我,