WEB开发网
开发学院软件开发VC .NET中的自绘机制 阅读

.NET中的自绘机制

 2006-07-18 11:26:21 来源:WEB开发网   
核心提示: 忽略了嵌套的层数,处理子菜单就简单了,.NET中的自绘机制(9),使用我自己写的一个递归算法就可以在GraphicMenu 的 Init 方法中启用所有的子菜单的自绘设置,不要介意你有多少层的级联菜单,记住,在你用完字体对象或其它的GDI+对象后应该将其释放,它们都会拥有正确的 Measu

忽略了嵌套的层数,处理子菜单就简单了。使用我自己写的一个递归算法就可以在GraphicMenu 的 Init 方法中启用所有的子菜单的自绘设置。不要介意你有多少层的级联菜单,它们都会拥有正确的 MeasureItem 与 DrawItem 事件处理函数。此外,MainMenu 类提供了箭头符号表示一个菜单项还有下级子菜单。 

上下文菜单与文本框

自定义一个上下文菜单,只需将相同的代码进行一定的扩展即可。还记得吗?在.NET框架中,上下文菜单被看作是只有一个子菜单的主菜单。它的上级菜单从未出现过。因此按照这种层次关系,目前我的代码还不需要做任何改动即可工作。

一个上下文菜单可以拥有一个缺省项。当用户在一个拥有缺省项的子菜单上双击时,这个缺省的菜单项就被自动地选择了。你可以使用 MenuItem 的 DefaultItem 属性来指定一个上下文菜单的缺省动作。而 Windows 则会将缺省项以黑体显示。一个自绘菜单也必须支持这个 特性。DrawItemState枚举有一个值——Default,可以让你在显示一个项时知道它是否为缺省菜单项。如果是,那你就需要改变菜单文本的字体,以黑体显示它。代码如下: Dim tmpFont As Font
Dim defaultItem As Boolean
defaultItem = (itemState And DrawItemState.Default) 
If (defaultItem) Then
  tmpFont = New Font(ItemFont, FontStyle.Bold)
Else
  tmpFont = ItemFont
End If   
  Font.Bold 属性是只读的,这意味着你在字体创建后就不能再撤销或设置其为黑体形式了。因此,如果你要显示一个缺省菜单项,你必须创建一个临时的黑体 属性字体对象并用它来显示菜单文本。记住,在你用完字体对象或其它的GDI+对象后应该将其释放,这是个好的编程习惯。

上一页  4 5 6 7 8 9 10  下一页

Tags:NET 机制

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接