| Option Explicit
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As _
Long) As Long
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias _
"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As _
NOTIFYICONDATA) As Long
Private Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * 64
End Type
Private Const NIM_ADD = &H0
Private Const NIM_MODIFY = &H1
Private Const NIM_DELETE = &H2
Private Const NIF_MESSAGE = &H1
Private Const NIF_ICON = &H2
Private Const NIF_TIP = &H4
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_MBUTTONDBLCLK = &H209
Private m_nid As NOTIFYICONDATA
Private m_bVisible As Boolean
Private WithEvents m_pctNID As PictureBox
Public Event MouseMove()
Public Event MouseUp(button As Integer)
Public Event MouseDown(button As Integer)
Public Event DblClick(button As Integer)
Public Sub AddIcon(pctNID As PictureBox, hIcon As Long, sTip As String)
Debug.Assert m_bVisible = False
Set m_pctNID = pctNID
pctNID.Visible = False
m_nid.cbSize = Len(m_nid)
m_nid.hIcon = hIcon
m_nid.hWnd = pctNID.hWnd
m_nid.szTip = sTip & vbNullChar
m_nid.uCallbackMessage = WM_MOUSEMOVE
m_nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
m_nid.uID = Int(Timer)
Shell_NotifyIcon NIM_ADD, m_nid
m_bVisible = True
End Sub
Public Sub ModifyIcon(hIcon As Long, sTip As String)
Debug.Assert m_bVisible
m_nid.hIcon = hIcon
m_nid.szTip = sTip & vbNullChar
Shell_NotifyIcon NIM_MODIFY, m_nid
End Sub
Public Sub RemoveIcon()
Debug.Assert m_bVisible
Shell_NotifyIcon NIM_DELETE, m_nid
m_bVisible = False
End Sub
Public Property Get Visible() As Boolean
Visible = m_bVisible
End Property
Public Sub BringToTop()
SetForegroundWindow m_pctNID.hWnd
End Sub
Private Sub Class_Terminate()
If m_bVisible Then
RemoveIcon
End If
End Sub
Private Sub m_pctNID_MouseMove(button As Integer, Shift As Integer, _
X As Single, Y As Single)
Dim msg As Long
msg = m_pctNID.ScaleX(X, m_pctNID.ScaleMode, vbPixels)
Select Case msg
Case WM_MOUSEMOVE
RaiseEvent MouseMove
Case WM_LBUTTONDOWN
RaiseEvent MouseDown(vbLeftButton)
Case WM_LBUTTONUP
RaiseEvent MouseUp(vbLeftButton)
Case WM_LBUTTONDBLCLK
RaiseEvent DblClick(vbLeftButton)
Case WM_RBUTTONDOWN
RaiseEvent MouseDown(vbRightButton)
Case WM_RBUTTONUP
RaiseEvent MouseUp(vbRightButton)
Case WM_RBUTTONDBLCLK
RaiseEvent DblClick(vbRightButton)
Case WM_MBUTTONDOWN
RaiseEvent MouseDown(vbMiddleButton)
Case WM_MBUTTONUP
RaiseEvent MouseUp(vbMiddleButton)
Case WM_MBUTTONDBLCLK
RaiseEvent DblClick(vbMiddleButton)
End Select
End Sub
|
| Option Explicit
Private WithEvents SystemTray As clsSysTray
Private Sub Form_Load()
SystemTray = New clsSysTray
SystemTray.AddIcon Picture1, Me.Icon.Handle, "My App!"
End Sub
Private Sub Form_Resize()
If Me.WindowState = vbMinimized Then
Me.Visible = False
End If
End Sub
Private Sub Form_Unload(Cancel As Integer)
SystemTray.RemoveIcon
End Sub
Private Sub SystemTray_MouseUp(button As Integer)
MsgBox "You clicked on the system tray icon"
Me.WindowState = vbNormal
Me.Visible = True
SystemTray.BringToTop
End Sub
|