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

.NET中的自绘机制

 2006-07-18 11:26:21 来源:WEB开发网   
核心提示: MeasureItem事件的目的是要菜单项需要多大的空间,为了计算这个值,.NET中的自绘机制(5),你需要知道关于该菜单项被绘制时所附绘制面的详细信息,而该事件相关信息中的GDI+ Graphic对象正对应了菜单被绘出时的绘制面,而且提供了相对于上一个菜单项高度的坐标及其项序号,如果你想

MeasureItem事件的目的是要菜单项需要多大的空间。为了计算这个值,你需要知道关于该菜单项被绘制时所附绘制面的详细信息。而该事件相关信息中的GDI+ Graphic对象正对应了菜单被绘出时的绘制面。而你要计算字体的高宽度,则依赖于你从菜单项获得的希望用于显示的字体。MeasureItemEventArgs 结构中并未显式地包含一个 MenuItem 的引用。但你却可以 通过将 MeasureItem 事件强制转换为 MenuItem 来轻松获取这个引用。Figure 6 说明了实现方法。菜单项的显示文本和热键信息(比如Ctrl+S )的大小依赖于当前的绘制面和字体,通过MeasureString 方法确定。实际的大小将用以设置 ItemWidth 的值。Figure 6 所示的代码中,菜单项的高度全部进行了统一固定化,这是方法所要求的。注意,自绘机制也适用于许多其他的控 件,包括 ListBox 和 ComboBox,它们有时也可能会接受不同高度的项。

最大的菜单项决定了整个菜单显示时占据的空间大小。当尺寸测定后,菜单开始在各菜单项的显示区域实际绘制这些项。每个菜单项都能绘制它想显示的任何东西,包括不同字体的文本、花 哨的背景、位图。这些工作则由下面将要讨论的 DrawItem 事件来完成。

DrawItem 事件

正如上文提到的,自绘方式下的菜单项在需要被绘出时收到这个事件。这个事件与 Win32 的WM_DRAWITEM消息对应,并给每个注册了的事件处理函数传递一个 DrawItemEventArgs 对象。Figure 7 列出并描述了这个类中与显示菜单项有关的一些成员信息。

DrawItemEventArgs 的三个成员很重要:Graphics、Bounds 和 State。Graphics 对象与相关的 GDI+ 实体设备上下文 对应,所有的绘制都必须在这个 Graphics 对象上进行。Bounds 属性界定了由 MeasureItem 事件确定的欲绘制矩形区域,而且提供了相对于上一个菜单项高度的坐标及其项序号。如果你想绘出一个背景、一张位图或一些文本,在这个事件的处理函数中实现就是最安全的。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:NET 机制

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