| Folgende Struktur wird verwendet, um die benötigten Daten über die Shell_NotifyIcon API-Funktion an das System zu übergeben: Private 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 Listing 1 Damit diese Struktur eingesetzt werden kann, müssen auch noch die entsprechenden Konstanten für die Flags und die Konstante MAX_TOOLTIP [gibt die maximale Länge des ToolTipTextes an] definiert werden. Im Folgenden die Deklaration der Shell_NotifyIcon API-Funktion: Private Declare Function Shell_NotifyIcon Lib _
"shell32.dll" Alias "Shell_NotifyIconA" _
(ByVal dwMessage As Long, lpData As _
NOTIFYICONDATA) As Long Listing 2 Es ist zu beachten, dass auch, nachdem das Icon bereits hinzugefügt wurde, eine oder mehrere Eigenschaften des SystemTray-Icons verändert werden können. Settings Folgender Beispielcode fügt das Icon des Programmfensters dem SystemTray hinzu. Unter den Flags wird angegeben, dass sowohl ein Icon als auch ein ToolTipText angegeben wurden. Unter uCallbackMessage wurde definiert, welche Meldung an das in hwnd angegebene Fenster weitergeleitet werden soll. In diesem Beispiel wurde dafür die WM_MOUSEMOVE-Message angegeben, da dadurch die Auswertung direkt im MouseMove-Ereignis des Formulars stattfinden kann. Wenn die Meldungen an ein anderes Fenster weitergeleitet werden sollen, so muss das Handle dieses Fensters unter hwnd angegeben werden und ggf. das entsprechende Fenster nach der WM_MOUSEMOVE-Message gesubclasst werden. Anschliessend wird das Icon über Aufruf von Shell_NotifyIcon mit der Struktur und dem NIM_ADD-Parameter hinzugefügt. Wenn das Icon bereits hinzugefügt wurde, aber Änderungen vorgenommen werden sollen, muss Shell_NofifyIcon erneut mit der [modifizierten] Struktur aufgerufen werden, wobei statt NIM_ADD die Konstante NIM_MODIFY eingesetzt werden muss [diese Konstante wird im hier beschriebenen Beispiel nicht verwendet]. With m_nfiIconData
.hwnd = Me.hwnd
.uID = Me.Icon
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_MOUSEMOVE
.hIcon = Me.Icon.Handle
.szTip = "System Tray Example" & vbNullChar
.cbSize = Len(m_nfiIconData)
End With
Call Shell_NotifyIcon(NIM_ADD, m_nfiIconData) Listing 3 Der Aufruf zum Entfernen des Icons erfolgt analog, nur dass in dwMessage die Konstante NIM_DELETE angegeben wird. |