.NET中的自绘机制
2006-07-18 11:26:21 来源:WEB开发网忽略了嵌套的层数,处理子菜单就简单了。使用我自己写的一个递归算法就可以在GraphicMenu 的 Init 方法中启用所有的子菜单的自绘设置。不要介意你有多少层的级联菜单,它们都会拥有正确的 MeasureItem 与 DrawItem 事件处理函数。此外,MainMenu 类提供了箭头符号表示一个菜单项还有下级子菜单。
上下文菜单与文本框
自定义一个上下文菜单,只需将相同的代码进行一定的扩展即可。还记得吗?在.NET框架中,上下文菜单被看作是只有一个子菜单的主菜单。它的上级菜单从未出现过。因此按照这种层次关系,目前我的代码还不需要做任何改动即可工作。
一个上下文菜单可以拥有一个缺省项。当用户在一个拥有缺省项的子菜单上双击时,这个缺省的菜单项就被自动地选择了。你可以使用 MenuItem 的 DefaultItem 属性来指定一个上下文菜单的缺省动作。而 Windows 则会将缺省项以黑体显示。一个自绘菜单也必须支持这个 特性。DrawItemState枚举有一个值——Default,可以让你在显示一个项时知道它是否为缺省菜单项。如果是,那你就需要改变菜单文本的字体,以黑体显示它。代码如下: Dim tmpFont As Font
Font.Bold 属性是只读的,这意味着你在字体创建后就不能再撤销或设置其为黑体形式了。因此,如果你要显示一个缺省菜单项,你必须创建一个临时的黑体 属性字体对象并用它来显示菜单文本。记住,在你用完字体对象或其它的GDI+对象后应该将其释放,这是个好的编程习惯。
Dim defaultItem As Boolean
defaultItem = (itemState And DrawItemState.Default)
If (defaultItem) Then
tmpFont = New Font(ItemFont, FontStyle.Bold)
Else
tmpFont = ItemFont
End If
- ››Netpas加速 让非电信宽带用户流畅上网
- ››net中fckediter的图片上传时候点击\浏览服务器\出...
- ››Netmsg局域网聊天程序
- ››NetAirus指控苹果iPhone侵犯其专利
- ››Netflix 在线影视播放程序将登陆 iPhone
- ››Net中各种不同的对象创建方式的速度差异
- ››NetNewsWire 功能简单 界面快速 Reader 浏览器
- ››NET-使用Js调用WebService
- ››Net 应用程序如何在32位操作系统下申请超过2G的内...
- ››NET 4.0新特性-- Corrupted State Exceptions
- ››NET应用程序的本地化及RESGEN.exe, AL.exe介绍
- ››NetMeeting在办公网络中的应用
更多精彩
赞助商链接