|
|
/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
Tray.cpp
Abstract:
Implements systray functionality
Notes:
Unicode only
History:
05/04/2001 rparsons Created
--*/
#include "precomp.h"
/*++
Routine Description:
Adds the specified icon to the system tray
Arguments:
hWnd - Parent window handle hIcon - Icon hanle to add to the tray lpwTip - Tooltip to associate with the icon
Return Value:
TRUE on success, FALSE otherwise
--*/ BOOL AddIconToTray( IN HWND hWnd, IN HICON hIcon, IN LPCWSTR lpwTip ) { NOTIFYICONDATA pnid; BOOL fReturn = FALSE;
pnid.cbSize = sizeof(NOTIFYICONDATA); pnid.hWnd = hWnd; pnid.uID = ICON_NOTIFY; pnid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; pnid.uCallbackMessage = WM_NOTIFYICON; pnid.hIcon = hIcon; if (lpwTip) { wcsncpy(pnid.szTip, lpwTip, wcslen(lpwTip)*sizeof(WCHAR)); } else { pnid.szTip[0] = '\0'; } fReturn = Shell_NotifyIcon(NIM_ADD, &pnid); if (hIcon) { DestroyIcon(hIcon); }
return (fReturn ? TRUE : FALSE); }
/*++
Routine Description:
Removes the specified icon from the system tray
Arguments:
hWnd - Parent window handle
Return Value:
TRUE on success, FALSE otherwise
--*/ BOOL RemoveFromTray( IN HWND hWnd ) { NOTIFYICONDATA pnid; BOOL fReturn = FALSE;
pnid.cbSize = sizeof(NOTIFYICONDATA); pnid.hWnd = hWnd; pnid.uID = ICON_NOTIFY; fReturn = Shell_NotifyIcon(NIM_DELETE, &pnid);
return (fReturn); }
/*++
Routine Description:
Displays a popup menu for the tray icon.
Arguments:
hWnd - Main window handle
Return Value:
TRUE on success, FALSE otherwise.
--*/ BOOL DisplayMenu( IN HWND hWnd ) { MENUITEMINFO mii; HMENU hMenu = NULL, hPopupMenu = NULL; POINT pt; BOOL fReturn = FALSE; hMenu = CreatePopupMenu();
if (hMenu) {
mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_DATA | MIIM_ID | MIIM_TYPE | MIIM_STATE; mii.fType = MFT_STRING; mii.wID = IDM_RESTORE; mii.hSubMenu = NULL; mii.hbmpChecked = NULL; mii.hbmpUnchecked = NULL; mii.dwItemData = 0L; mii.dwTypeData = L"&Restore"; mii.cch = 14; mii.fState = MFS_ENABLED;
InsertMenuItem(hMenu, 0, TRUE, &mii);
mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_TYPE; mii.fType = MFT_SEPARATOR; mii.hSubMenu = NULL; mii.hbmpChecked = NULL; mii.hbmpUnchecked = NULL; mii.dwItemData = 0L; InsertMenuItem(hMenu, 1, TRUE, &mii);
mii.cbSize = sizeof(MENUITEMINFO); mii.fMask = MIIM_DATA | MIIM_ID | MIIM_TYPE | MIIM_STATE; mii.fType = MFT_STRING; mii.wID = IDM_EXIT; mii.hSubMenu = NULL; mii.hbmpChecked = NULL; mii.hbmpUnchecked = NULL; mii.dwItemData = 0L; mii.dwTypeData = L"E&xit"; mii.cch = 10; mii.fState = MFS_ENABLED;
InsertMenuItem(hMenu, 2, TRUE, &mii);
// Get the coordinates of the cursor
GetCursorPos(&pt);
// Show the popup menu - the menu is left aligned and
// we're tracking the left button or right button
fReturn = TrackPopupMenuEx(hMenu, TPM_CENTERALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, hWnd, NULL); }
if (hMenu) { DestroyMenu(hMenu); }
return (fReturn); }
|