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

东坡下载 2010年10月14日 14:13:14

      1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False
      2、菜单:工程--添加模块 按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas
      3、在Module1中写下如下代码:

      Option Explicit
      Public Const MAX_TOOLTIP As Integer = 64
      Public Const NIF_ICON = &H2
      Public Const NIF_MESSAGE = &H1
      Public Const NIF_TIP = &H4
      Public Const NIM_ADD = &H0
      Public Const NIM_DELETE = &H2
      Public Const WM_MOUSEMOVE = &H200
      Public Const WM_LBUTTONDOWN = &H201
      Public Const WM_LBUTTONUP = &H202
      Public Const WM_LBUTTONDBLCLK = &H203
      Public Const WM_RBUTTONDOWN = &H204
      Public Const WM_RBUTTONUP = &H205
      Public Const WM_RBUTTONDBLCLK = &H206
      Public Const SW_RESTORE = 9
      Public Const SW_HIDE = 0
      Public nfIconData As NOTIFYICONDATA
      Public Type NOTIFYICONDATA
      cbSize As Long
      hWnd As Long
      uID As Long
      uFlags As Long
      uCallbackMessage As Long
      hIcon As Long
      szTip As String * MAX_TOOLTIP
      End Type
      Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
      Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

      4、在Form1的Load事件中写下如下代码:

      Private Sub Form_Load()
      '以下把程序放入System Tray====================================System Tray Begin
      With nfIconData
      .hWnd = Me.hWnd
      .uID = Me.Icon
      .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
      .uCallbackMessage = WM_MOUSEMOVE
      .hIcon = Me.Icon.Handle
      '定义鼠标移动到托盘上时显示的Tip
      .szTip = App.Title + "(版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar
      .cbSize = Len(nfIconData)
      End With
      Call Shell_NotifyIcon(NIM_ADD, nfIconData)
      '=============================================================System Tray End
      Me.Hide
      End Sub

      5、在Form1的QueryUnload事件中写入如下代码:

      Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
      Call Shell_NotifyIcon(NIM_DELETE, nfIconData)
      End Sub

      6、在Form1的MouseMove事件中写下如下代码:

      Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
      Dim lMsg As Single
      lMsg = X / Screen.TwipsPerPixelX
      Select Case lMsg
      Case WM_LBUTTONUP
      'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家"
      '单击左键,显示窗体
      ShowWindow Me.hWnd, SW_RESTORE
      '下面两句的目的是把窗口显示在窗口最顶层
      'Me.Show
      'Me.SetFocus
      ' Case WM_RBUTTONUP
      ' PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray
      ' Case WM_MOUSEMOVE
      ' Case WM_LBUTTONDOWN
      ' Case WM_LBUTTONDBLCLK
      ' Case WM_RBUTTONDOWN
      ' Case WM_RBUTTONDBLCLK
      ' Case Else
      End Select
      End Sub

      7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。单击此图标,Form1就自动弹出来了。