mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
187 lines
4.2 KiB
187 lines
4.2 KiB
/*++
|
|
|
|
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);
|
|
}
|