分类:
2008-10-14 14:50:39
Public Class GraphicMenu : Inherits Component ' Appearance Properties ' TODO:: List properties ' Behavior Properties ' TODO:: List properties Public Sub Init(ByVal menu As Menu) ' Return if the menu is null If menu Is Nothing Then Return End If ' Initialize the font object used to render the menu items ItemFont = New Font(FontName, FontSize) ' Initialize the hashtable used to hold bitmap/item bindings If menuItemIconCollection Is Nothing Then menuItemIconCollection = New Hashtable End If ' Context menu requires a different treatment If TypeOf menu Is ContextMenu Then HandleChildMenuItems(menu) Return End If ' Iterate on all top-level menus and handle their items For Each popup As MenuItem In menu.MenuItems HandleChildMenuItems(popup) Next End Sub End Class
Property | Description |
---|---|
Graphics | 获得用以计算尺寸所需的Graphics对象 |
Index | 读取或设置需要改变的高宽度的项索引 |
ItemHeight | 读取或设置项的高度值 |
ItemWidth | 读取或设置项的宽度值 |
' **************************************************************** ' HELPER: StdMeasureItem ' INPUT : menu item, data used for measurement ' NOTES : Event handler for the MeasureItem event typical of ' owner-drawn objects Private Sub StdMeasureItem(ByVal sender As Object, _ ByVal e As MeasureItemEventArgs) ' Grab a reference to the menu item being measured Dim item As MenuItem = CType(sender, MenuItem) ' If it is a separator, handle differently If (item.Text = "-") Then e.ItemHeight = SeparatorHeight Return End If ' Measure the item text with the current font. The text to ' measure includes keyboard shortcuts Dim stringSize As SizeF stringSize = e.Graphics.MeasureString(GetEffectiveText(item), ItemFont) ' Set the height and width of the item e.ItemHeight = MenuItemHeight e.ItemWidth = BitmapWidth + HorizontalTextOffset + _ CInt(stringSize.Width) + RightOffset End Sub ' **************************************************************** ' HELPER: StdDrawItem ' INPUT : menu item, ad hoc structure for custom drawing ' NOTES : Event handler for the DrawItem event typical of ' owner-drawn objects Private Sub StdDrawItem(ByVal sender As Object, ByVal e As _ DrawItemEventArgs) ' Grab a reference to the item being drawn Dim item As MenuItem = CType(sender, MenuItem) ' Saves helper objects for easier reference Dim g As Graphics = e.Graphics Dim bounds As RectangleF = MakeRectangleF(e.Bounds) Dim itemText As String = item.Text Dim itemState As DrawItemState = e.State ' Define bounding rectangles to use later CreateLayout(bounds) ' Draw the menu item background and text DrawBackground(g, itemState) ' Draw the bitmap leftmost area DrawBitmap(g, item, itemState) ' Draw the text DrawText(g, item) End Sub
Property | Description |
---|---|
BackColor | 获取项的背景 |
Bounds | 获取项将要占据的矩形 |
Font | 获取项所使用的字体 |
ForeColor | 获取项的前景色 |
Graphics | 获取用以绘制该项的Graphics对象 |
Index | 获取将要绘制的项的索引 |
State | 获取该项的状态 |
If (disabled) Then Dim imageAttr As New ImageAttributes imageAttr.SetGamma(0.2F) Dim tmpRect = New Rectangle( BitmapBounds.X + 2, _ BitmapBounds.Y + 2, BitmapBounds.Width - 2, _ BitmapBounds.Right - 2) g.DrawImage(bmp, tmpRect, 0, 0, _ bmp.Width, bmp.Height, GraphicsUnit.Pixel, imageAttr) ImageAttr.ClearGamma() Else g.DrawImage(bmp, BitmapBounds.X + 2, BitmapBounds.Y + 2) End If