数据库

本类阅读TOP10

·SQL语句导入导出大全
·SQL Server日期计算
·SQL语句导入导出大全
·SQL to Excel 的应用
·Oracle中password file的作用及说明
·MS SQLServer OLEDB分布式事务无法启动的一般解决方案
·sqlserver2000数据库置疑的解决方法
·一个比较实用的大数据量分页存储过程
·如何在正运行 SQL Server 7.0 的服务器之间传输登录和密码
·SQL中两台服务器间使用连接服务器

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
一种简单方便的用户权限管理方法--使用菜单来管理用户权限(下)

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

   问题有点棘手,于是想到去MSDN上查看有哪些可以用的关于的菜单消息,我找到了两
WM_MENUCHAR,WM_MENUSELECT,WM_MENUCHAR是用来判断当有菜单项被选中时,接收到了来自键盘的按键的时候触发,WM_MENUSELECT是在菜单项选中时触发,于是我试了两个消息。发现在映射到WM_MENUSELECT的用户自定义事件中用KEYDOWN判断用户是否按下键根本没用,现在大家明白了,WM_MENUCHAR就是解决问题的关键所在。

WM_MENUCHAR消息是在当用户选中了某个菜单项时(任一个),只是只要按下键盘上的任一个有效键,通过消息上的CHAR可以看出来,就可以触发该事件了,这样。我可以在选中某个菜单项的时候,在出来这个消息的事件里让这个菜单项的CHECKED属性变化,这样就可以让菜单保持展开状态,实现复选了。


在菜单所在窗口中定义一个用户事件,映射到系统消息PBM_MENUCHAR 叫US_MENUCHAR
在这个事件里写
int li_upper
li_upper=upperbound(myCurMenu.item)
if keydown(keyD!)  and li_upper= 0 then //判断D键是否按下和是否还有下一级菜单,但是在这里keydown判断不了是否鼠标右键被按下,是因为这个消息只取键盘按键按下与否的信息。
 myCurMenu.checked=not myCurMenu.checked
 myCurMenu.enabled=not myCurMenu.enabled
 myCurMenu.enabled=not myCurMenu.enabled
end if

myCurMenu是个全局变量,用来存放当前用户选中的菜单项,当然这需要在每个菜单项的SELECTED事件里加上一句
MyCurMenu =this
来获得当前高亮显示的菜单。

当然你也可以用API从WM_MENUCHAR消息带来的菜单句炳等去判断是哪个菜单项按下,我试了,没成功。大家可以自己试!

大致的编码就这么多,比较简单,但是没能实现用鼠标右键点选权限,只能用键盘来控制,还是有那么一点不方便。但是感觉还是比较方便实用的,欢迎大家斧正!谢谢!

(完)


 




相关文章

相关软件