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

.NET中的自绘机制

 2006-07-18 11:26:21 来源:WEB开发网   
核心提示: Win32平台下的自绘功能比较容易通过其 MenuItem 类为数不多的属性和事件来实现,如果你已是一位熟练的 Win32 程序员,.NET中的自绘机制(2),你应该赏识.NET下自绘编程模型 的简捷与效率,如果你从未接触过 Win32的自绘控件,这个菜单在运行时只有一个自绘外观,在本文中

Win32平台下的自绘功能比较容易通过其 MenuItem 类为数不多的属性和事件来实现。如果你已是一位熟练的 Win32 程序员,你应该赏识.NET下自绘编程模型 的简捷与效率。如果你从未接触过 Win32的自绘控件,你将无法想象它会有多痛苦。再回到.NET的自绘菜单,只要你简单地把在 MenuItems 属性中找到的每一个MenuItem对象的 OwnerDraw 属性设置为真(TRUE)即可。此外,每个 MenuItem 对象都能处理一对事件-DrawItem 和 MeasureItem,它们 收集用于 Win32 平台的底层信息。下面的Visual Basic.NET 代码演示了如何将一个菜单项变成自绘菜单项。

Sub MakeItemOwnerDraw(ByVal item As MenuItem)
item.OwnerDraw = True
AddHandler item.DrawItem, AddressOf StdDrawItem
AddHandler item.MeasureItem, AddressOf StdMeasureItem
End Sub
  在绘制菜单之前,当菜单需要知道某个菜单项的大小时,便触发 MeasureItem 事件,当菜单需要绘制特定项目时,则触发 DrawItem 事件 。Windows 使菜单足够大以适应最大的菜单项。MeasureItem 事件处理函数根据给定的菜单字体大小计算并返回菜单项的文本大小,而 DrawItem 事件处理函数则将 某些菜单文本及其位图、花哨的背景,甚或是你想在菜单上显示的任何东西绘制在给定的Graphics对象上。

重写窗体菜单

重写某个窗体菜单,使之更多彩、更直观的步骤很简单:只要设置每个 MenuItem 对象的OwnerDraw 属性为True,并为关键事件编写适当的事件处理函数。怎样 以最佳方式实现这些呢?你会选择从Menu或MainMenu类派生一个新的类吗?甚至创建一个新的组件与这些缺省的菜单对象集并肩运行?

就我所知,最简单的方法是创建一个新的包含一个初始化方法的外部类——我称其为 GraphicMenu。它这个初始化方法使用一个指向你所希望定制的菜单的引用 作为参数,将其所有子菜单项的自绘标志打开。这个方法的缺点在于始终需要一个对 初始化程序(initializer )的显式调用。更重要的是,你将无法 得到 Visual Studio .NET设计器的任何支持。最终,这个菜单在运行时只有一个自绘外观。在本文中,我将全面描述这种方法。

上一页  1 2 3 4 5 6 7  下一页

Tags:NET 机制

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