.NET中的自绘机制
2006-07-18 11:26:21 来源:WEB开发网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 事件确定的欲绘制矩形区域,而且提供了相对于上一个菜单项高度的坐标及其项序号。如果你想绘出一个背景、一张位图或一些文本,在这个事件的处理函数中实现就是最安全的。
- ››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在办公网络中的应用
更多精彩
赞助商链接