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

.NET中的自绘机制

 2006-07-18 11:26:21 来源:WEB开发网   
核心提示: DrawBackground 方法检查菜单项的状态,创建相应的前景色与背景色的刷子(可以选择渐变色的刷子),.NET中的自绘机制(7),然后,它填充位图与文本区域,但要保证所有位图的大小统一,在本文所示程序中,两个区域的背景色都由 GraphicMenu 中的属性控制,在GDI+中

DrawBackground 方法检查菜单项的状态,创建相应的前景色与背景色的刷子(可以选择渐变色的刷子)。然后,它填充位图与文本区域。两个区域的背景色都由 GraphicMenu 中的属性控制。在GDI+中,填充一个区域需要使用一个 Brush 对象。有趣的是,Brush 是 SolidBrush 和 LinearGradientBrush 类的基类,因此要使用已有的实心或背景刷子也并不需要改变相应的代码。完整的代码请参看 打包下载的源代码,我在这里只做简要的介绍。

DrawBitmap 方法同样要检查菜单项的状态。如果需要一个内嵌的位图(比如一个复选或单选按钮形式的菜单项),对应的图像就会从这个控制的程序集中被提取并显示。否则 DrawBitmap 方法会在 Hash 表中查找与该 MenuItem 对象关联的图标,如果找到了相应的图标文件就显示它。

你可以把位图作为一种内嵌的资源嵌入一个 .NET的程序集中。要这样做,只需在选择位图后,将解决方案资源管理器的属性管理器中的“生成操作”设置改为“嵌入的资源”即可(注意,“嵌入的资源”对于一个图形而言并非缺省的生成操作,因此这步操作是决定性的)。同样的,你必须为这个图像定义一个特定的名字。而这个名字在  Visual Basic .NET 里必须以命名空间名作为前缀(如果你用的C#,会有少许差别)。假设 GraphicMenu 类属于 MsdnMag 命名空间,那么所有内嵌图像名须采取  MsdnMag.FileName.bmp 这样的形式。那么如何在运行时获得这些图像呢?如下所示: If item.RadioCheck Then
  bmp = ToolboxBitmapAttribute.GetImageFromResource( _
    Me.GetType(), "Bullet.bmp", False)
Else
  bmp = ToolboxBitmapAttribute.GetImageFromResource( _
    Me.GetType(), "Checkmark.bmp", False)
End If   
  你可以使用一个叫做 GetImageFromResource 的 ToolboxBitmapAttribute 类的共享成员。不要被它的类名迷惑——它是一个定义在 System.Drawing 程序集中的类,但可以按传统方式在编程中使用它(与基于属性的编程模型相对)。GetImageFromResource 方法只是这段代码的一个辅助方法: '''' t is the type whose namespace is used to scope
'''' the resource name (GraphicMenu in this context)
Dim img As Image
Dim str As Stream
str = t.Module.Assembly.GetManifestResourceStream(t, "Bullet.bmp");
If Not (str Is Nothing) Then
 img = new Bitmap(str)
End If   
  当在一个控制上使用时,ToolboxBitmapAttribute 属性通知Visual Studio Form设计器这样的容器返回该控制对应的一个图标。位图通常会被嵌入包含了该控制的程序集中,当然也不是必须的。菜单位图的大小由编程者控制,但要保证所有位图的大小统一。在本文所示程序中,我用16×16大小的位图。

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

Tags:NET 机制

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