类:clsNotifyIcon
Private Type NOTIFYICONDATA
cbSize As Long
hwnd As Long
uId As Long
uFlags As Long
uCallBackMessage As Long
hIcon As Long
szTip As String * 128
dwState As Long
dwStateMask As Long
szInfo As String * 256
uTimeoutOrVersion As Long '由于VB中没有Union类型,只能用Long型代替
szInfoTitle As String * 64
dwInfoFlags As Long
End Type
Private Const NOTIFYICON_VERSION = 3
Private Const NOTIFYICON_OLDVERSION = 0
'保持属性值的局部变量
Private mvarHwnd As Long '局部复制
Private mvarPicture As Long '局部复制
Private mvarTip As String '局部复制
Public Property Let Tip(ByVal vData As String)
'设置鼠标在图标上移动时的提示内容
On Error Resume Next
mvarTip = vData
ni.szTip = mvarTip & Chr(0)
End Property
Public Property Let Icon(ByVal vData As Long)
'设置压入托盘的图标
On Error Resume Next
mvarPicture = vData
ni.hIcon = mvarPicture
End Property
Public Property Let hwnd(ByVal vData As Long)
On Error Resume Next
mvarHwnd = vData
ni.hwnd = mvarHwnd
End Property
Sub Add()
NotifyIcon NIM_ADD
End Sub
Sub Modify()
NotifyIcon NIM_MODIFY
End Sub
Sub Delete()
NotifyIcon NIM_DELETE
End Sub
Sub NotifyIcon(ByVal action As NIMAction)
On Error Resume Next
If ni.hwnd = 0 Then
MsgBox "请设置对象的hwnd属性!", vbCritical, "提示"
Exit Sub
End If
Shell_NotifyIcon action, ni
End Sub
Private Sub Class_Initialize()
On Error Resume Next
With ni
.cbSize = Len(ni)
.uId = 1&
.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
.uCallBackMessage = WM_MOUSEMOVE
.dwState = 1
.dwStateMask = 0
.uTimeoutOrVersion = 10000
.dwInfoFlags = 1
End With
End Sub
Private Sub Class_Terminate()
On Error Resume Next
'Me.Delete
End Sub
窗体:
Dim ni As New clsNotifyIcon
Private Sub Form_Load()
With ni
.hwnd = Me.hwnd
.Icon = Me.Image1(0).Picture
.Tip = "多个图标示例"
.Add
End With
Me.Timer1.Interval = 500
End Sub
Private Sub Form_Unload(Cancel As Integer)
ni.Delete
End Sub
Private Sub Timer1_Timer()
Static num As Integer
ni.Icon = Me.Image1(num)
ni.Modify
num = num + 1
If num = 3 Then num = 0
End Sub