在VB.NET中给菜单加上图标

菜单

Adding icons to menus in VB.NET

'IconsMenuMain.vb
'Module for adding icons to menus...

Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.Drawing.Text
Imports 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

时间: 2024-11-05 06:15:52

在VB.NET中给菜单加上图标的相关文章

如何在Ubuntu 13.10中给菜单添加图标

通常,使用Ubuntu 13.10的用户会会对默认的程序.偏好和功能进行优化,才能得到更好的用户体验. Ubuntu的用户体验是可以优化调整的,因此用户可以通过一些工具来修改和调整那些默认设置,比如使用Ubuntu Tweak. 默认情况下,Ubuntu禁用了内部菜单的图标,即,右键点击桌面打开右键菜单时,菜单中只包含文本而且没有相应的图标. 不过,在Ubuntu 13.10的菜单中添加图标是很简单的: 安装Ubuntu Tweak sudo add-apt-repository ppa:tua

在VB 6.0 的菜单条中能不能增加一些控件

问题描述 在VB 6.0 的菜单条中能不能增加一些控件 在VB 6.0 的菜单条中能不能增加一些控件,比如按钮或者下拉框?怎么把菜单条和其它控件组合起来呢? 解决方案 你可以用toolbar来模拟,你可以把其它控件装入toolbar的.

VB6如何在托盘中写入应用程序图标

本文详细介绍VB6如何在托盘中写入应用程序图标 相关文章: 用VB实现托盘动画图标 VB托盘程序详解一 VB托盘程序详解二 VB托盘程序详解三 VB托盘程序详解四 VB托盘程序详解五 也谈Windows下的自动存盘 利用WindowsAPI获得系统高级功能 1.新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False 2.菜单:工程--添加模块 按"打开"这样就添加了一个新模块,名为Module1,保存为Module1.bas 3.在Module1中写下如下代

android-显示选项卡菜单的图标

问题描述 显示选项卡菜单的图标 我想显示设备的选项卡菜单的图标,也不要软键盘.当我在 4.0.3 版本上运行程序时没有软键盘,我不知道如何打开选项卡菜单. 我查找很多资料说是因为 Android Manifest (minSdkVersion 和 TargetVersion).下面是程序的 android manifest: <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="14" /&

我的推荐:在VB.NET中寻找App

摘要 使用过Visual Basic 6的开发人员几乎都使用过App这个对象,它的功能强大人所共知,那么Visual Basic .NET中是否也有类似的对象呢?下面将会进一步说明. -------------------------------------------------------------------------------- 目录 1. App简介 2. 在VB.NET寻找类似功能 3. 简单示例 4. 小结 ----------------------------------

把握VB.NET中的流FileStream

stream 当你第一次用VB.NET读写文件的时候,你肯定会发现VB.NET摒弃了传统的文件I/O支持,感觉不习惯.其实,在.NET里面,微软用丰富的"流"对象取代了传统的文件操作,而"流",是一个在Unix里面经常使用的对象. 我们可以把流当作一个通道,程序的的数据可以沿着这个通道"流"到各种数据存储机构(比如:文件,字符串,数组,或者其他形式的流等).为什么我们会摒弃用了那么久的IO操作,而代之为流呢?其中很重要的一个原因就是并不是所有的数

VB编程中钩子的实现及应用

编程 前言 Windows系统中钩子具有相当强大的功能,通过这种技术可以对几乎所有的Windows 系统中的消息进行拦截.监视.处理.这种技术可以广泛应用于各种软件,尤其是需要有监控.自动记录等对系统进行监测功能的软件.本文针对这个专题进行了探讨,希望可以为读者朋友们起到抛砖引玉的作用. 一.钩子的机制及类型 Windows的应用程序都是基于消息驱动的,应用程序的操作都依赖于它所得到的消息的类型及内容.钩子与Dos中断截获处理机制有类似之处.钩子(Hook)是Windows消息处理机制的一个平台

VB.NET中的类

我在以前的文章里曾经提到:VB.NET的出现使得VB6在类的概念及其操作上发生了巨大的变化.现在就让我们进到这些变化中来进行更深入的探讨.首先让我们看看类到底意味着什么. 不妨假设我把你带回到了学院,现在你走进一个教室,我要求你解释一下什么是类(class),你可能会这样回答:"一组学生形成一个班(class)."呵呵,如果这样回答,你真是歪打正着了:没错,在这里,组就是最关键的词.用面向对象的编程思想来看,类就是存储数据同时给一组相关代码赋予协调功能的方式.类是面向对象编程的核心.

在VB.NET中实现拖放操作

第一次在csdn上发文章,希望大家帮忙使劲顶,鼓励一下新手,谢谢 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchImpDragDrop.asp 在VB.NET中实现拖放操作 Implementing Drag and Drop in Visual Basic .NET Steve Hoag Visual Basic .NET Team Microsoft Corpor