设计思想:
前提:
权限是按菜单来分配的,一个菜单项对应是一个权限,窗口中要控制的非菜单控件通过隐性菜单项来体现到菜单上,保证一个菜单项对应一个权限。
1,从数据库表里取到用户组(角色或者用户,都一样处理)所具有的权限
2根据这些权限设置菜单,将相应菜单项的CHECKED=TRUE(有权限)
3。用户在菜单上进行权限设置,要设有权限即设置相应菜单的CHECKED属性为真
反之,则假
4确定用户的选择,遍历菜单将每个菜单项与用户组权限表比较,如果用户权限表里有的权限而在对应菜单里CHECKED=FALSE,则删去此权限,为TRUE则不处理,如果用户权限表中没有的权限而在对应菜单里CHECKED=TRUE,则增加此权限,为FALSE则不处理。
效果图如下
:
在每个菜单项的CLICKED事件里写
this.checked=not this.checked
在做这个程序的时候,碰见一个最大的问题就是,在点选菜单时,一点击左键菜单就不展开了,要为下一个权限点选的时候,又要重新点开菜单,这样是很麻烦的。所以我想要是在点开菜单的同时,可以点选很多子项菜单,这样就可以只需要展开一次菜单,然后可以给多个子菜单项进行权限设置了。
这可是个大问题啊,问了很多高人。子定义可视类不能以菜单为基类。又不能给菜单定义用户事件来映射到WINDOW消息上。而且菜单只有CLICKED和SELECTED两个事件,菜单调用CLICKED事件后会自动变成不展开状态,SELECTED事件里又不能用KEYDOWN函数来判断是否点击了鼠标右键或着键盘按下了某个键,在这个事件里去触发窗口里自定义事件(这个事件里放了KEYDOWN来判断是否有鼠标右键或其他键盘键按下),也不能遂愿。郁闷了我一天啊!
今天手写累了,先到这,要是大家觉得放在这不会玷污大家的眼睛的话,我会尽快努力把下文写完的,
待续!
本文地址:http://com.8s8s.com/it/it21515.htm