正文

在VB.NET中给菜单加上图标2006-05-26 20:13:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/14927.html

分享到:

Adding icons to menus in VB.NET 'IconsMenuMain.vb'Module for adding icons to menus... Imports SystemImports System.ComponentModelImports System.DrawingImports System.Drawing.Drawing2DImports System.Drawing.TextImports System.Windows.Forms Module IconsMenuMain   Dim m_Font As New Font("Arial", 8)   Sub MeasureItems(ByVal EvMeasureItem As System.Windows.Forms.MeasureItemEventArgs, _           ByVal Mi As MenuItem)    Dim sf As StringFormat = New StringFormat()    sf.HotkeyPrefix = HotkeyPrefix.Show    sf.SetTabStops(60, New Single() {0})    EvMeasureItem.ItemHeight = 22    EvMeasureItem.ItemWidth = CInt(EvMeasureItem.Graphics.MeasureString(GetRealText(Mi), _                               m_Font, 10000, sf).Width) + 10    sf.Dispose()    sf = Nothing  End Sub   Sub DrawItems(ByVal EvDrawItems As System.Windows.Forms.DrawItemEventArgs, _         ByVal Mi As MenuItem, ByVal m_Icon As Icon)    Dim br As Brush    Dim fDisposeBrush As Boolean    If Not m_Icon Is Nothing Then      If Not Mi.Checked Then        EvDrawItems.Graphics.DrawIcon(m_Icon, EvDrawItems.Bounds.Left + 2, _                       EvDrawItems.Bounds.Top + 2)      Else        EvDrawItems.Graphics.DrawIcon(m_Icon, EvDrawItems.Bounds.Left + 2, _                       EvDrawItems.Bounds.Top + 2)        Dim nPen As System.Drawing.Pen        If Not Mi.Enabled Then          NPEN = New Pen(Color.DarkGray)        Else          nPen = New Pen(Color.Gray)        End If        EvDrawItems.Graphics.DrawRectangle(nPen, 1, EvDrawItems.Bounds.Top, 20, 20)        EvDrawItems.Graphics.DrawRectangle(nPen, 3, EvDrawItems.Bounds.Top + 2,                           16, 16)      End If    Else      If Mi.Checked Then        Dim nPen As System.Drawing.Pen        If Not Mi.Enabled Then          NPEN = New Pen(Color.DarkGray)        Else          nPen = New Pen(Color.Gray)        End If        EvDrawItems.Graphics.DrawRectangle(nPen, 1, EvDrawItems.Bounds.Top, 20, 20)        Dim Pnts() As Point        ReDim Pnts(2)        Pnts(0) = New Point(15, EvDrawItems.Bounds.Top + 6)        Pnts(1) = New Point(8, EvDrawItems.Bounds.Top + 13)        Pnts(2) = New Point(5, EvDrawItems.Bounds.Top + 10)        If Mi.Enabled Then          EvDrawItems.Graphics.DrawLines(New Pen(Color.Black), Pnts)        Else          EvDrawItems.Graphics.DrawLines(New Pen(Color.Gray), Pnts)        End If      End If    End If    Dim rcBk As Rectangle = EvDrawItems.Bounds    rcBk.X += 24     If CBool(EvDrawItems.State And DrawItemState.Selected) Then      br = New LinearGradientBrush(rcBk, Color.MidnightBlue, Color.LightBlue, 0)      fDisposeBrush = True    Else      br = SystemBrushes.Control    End If     EvDrawItems.Graphics.FillRectangle(br, rcBk)    If fDisposeBrush Then br.Dispose()    br = Nothing     Dim sf As StringFormat = New StringFormat()    sf.HotkeyPrefix = HotkeyPrefix.Show    sf.SetTabStops(60, New Single() {0})    If Mi.Enabled Then      br = New SolidBrush(EvDrawItems.ForeColor)    Else      br = New SolidBrush(Color.Gray)    End If     EvDrawItems.Graphics.DrawString(GetRealText(Mi), m_Font, br, _                    EvDrawItems.Bounds.Left + 25, _                    EvDrawItems.Bounds.Top + 2, sf)    br.Dispose()    br = Nothing    sf.Dispose()    sf = Nothing  End Sub   Function GetRealText(ByVal Mi As MenuItem) As String    Dim s As String = Mi.Text    If Mi.ShowShortcut And Mi.Shortcut <> Shortcut.None Then      Dim k As Keys = CType(Mi.Shortcut, Keys)      s = s & Convert.ToChar(9) & _        TypeDescriptor.GetConverter(GetType(Keys)).ConvertToString(k)    End If    Return s  End Function End Module '**************'In the items of menu which you want add icon modify the property OwnerDraw to TRUE'For use this code only add the next references in the form...   Private Sub MenuItem3_DrawItem(ByVal sender As Object, _                  ByVal e As System.Windows.Forms.DrawItemEventArgs) _      Handles MenuItem3.DrawItem     Dim Ic As New Icon("C:\Documents and Settings\Yo\Escritorio\iconmenu\Save.ico")    DrawItems(e, MenuItem3, Nothing)  End Sub   Private Sub MenuItem3_MeasureItem(ByVal sender As Object, _                   ByVal e As System.Windows.Forms.MeasureItemEventArgs) _      Handles MenuItem3.MeasureItem     MeasureItems(e, MenuItem3)  End Sub  

阅读(2651) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册