Advertisement
2002ASP Classes/ Frameworks/ OOP #7365

System Tray Class (Very Easy To Use)

This class I developed makes it very easy to put/delete/modify icons in the system tray. You can also get mouse notifications from the system tray. Once again, NO MFC!

AI

AIサマリー: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

ソースコード
original-source
//Class Code (Copy And Paste it Somewhere)//
#define WM_TRAYNOTIFY 0xA44C
#include <Shellapi.h>
class clsSysTray
	{
		public:
			clsSysTray();
			
			BOOL SetIcon(HICON hNewIcon);
			HICON GetIcon();
			BOOL SetTipText(char *lpstrNewTipText);
			char *GetTipText();
			BOOL AddIcon();
			BOOL RemoveIcon();
			HWND hWnd;
			UINT uID;
		protected:
			NOTIFYICONDATA NotifyIconData;
			bool bInTray;
			
	};
clsSysTray::clsSysTray()
	{
		bInTray = false;
		NotifyIconData.cbSize = sizeof(NotifyIconData);
		NotifyIconData.uID = uID = 2;
		NotifyIconData.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
		NotifyIconData.uCallbackMessage = WM_TRAYNOTIFY;
		NotifyIconData.hIcon = LoadIcon(NULL, IDI_APPLICATION);
		NotifyIconData.szTip[0] = '\0';
		NotifyIconData.hWnd = NULL;
		
	}
HICON clsSysTray::GetIcon()
	{
		return(NotifyIconData.hIcon);
	}
BOOL clsSysTray::SetIcon(HICON hNewIcon)
	{
		NotifyIconData.hIcon = hNewIcon;
		if(bInTray)
			{
				BOOL iRetVal;
				iRetVal = Shell_NotifyIcon(NIM_MODIFY, &NotifyIconData);
				if(iRetVal)
					{
						bInTray = true;
					}
				return(iRetVal);
			}
		else
			return(1);
	}
char *clsSysTray::GetTipText()
	{
		return(NotifyIconData.szTip);
	}
BOOL clsSysTray::SetTipText(char *lpstrNewTipText)
	{
		strcpy(NotifyIconData.szTip, lpstrNewTipText);
		if(bInTray)
			{
				BOOL iRetVal;
				iRetVal = Shell_NotifyIcon(NIM_MODIFY, &NotifyIconData);
				if(iRetVal)
					{
						bInTray = true;
					}
				return(iRetVal);
			}
		else
			return(1);
	}
BOOL clsSysTray::AddIcon()
	{
		BOOL iRetVal;
		
		NotifyIconData.hWnd = hWnd;
		NotifyIconData.uID = hWnd;
		iRetVal = Shell_NotifyIcon(NIM_ADD, &NotifyIconData);
		if(iRetVal)
			{
				bInTray = true;
			}
		return(iRetVal);
	}
BOOL clsSysTray::RemoveIcon()
	{
		BOOL iRetVal;
		iRetVal = Shell_NotifyIcon(NIM_DELETE, &NotifyIconData);
		if(iRetVal)
			{
				bInTray = false;
			}
		return(iRetVal);
	}
//End Class Code//
//Example Of Use///
.
.
.
clsSysTray SystemTrayEx;
SystemTrayEx.hWnd = hWnd;
SystemTrayEx.SetTipText("HI");
SystemTrayEx.AddIcon();
SystemTrayEx.SetIcon(hApp_Icon_Main);
.
.
.
//End Example//
///Example Of Callback (Notification) Messages//
.
.
.
	switch(Msg)
		{	
		
		case WM_TRAYNOTIFY:
 	{
 		switch(LOWORD(lParam))
 			{
 	case WM_LBUTTONDBLCLK:
						case WM_LBUTTONDOWN:
						case WM_LBUTTONUP:
						case WM_RBUTTONDBLCLK:
						case WM_RBUTTONDOWN:
						case WM_RBUTTONUP:		
 			}
		return(0);
		} break;
.
.
.
//End Callback Example//
オリジナルのコメント (3)
Wayback Machineから復元