00001
00002
00003
00004
00005
00006 #include "stdafx.h"
00007 #include "FdmApp.h"
00008 #include "fsTrayIconMgr.h"
00009 #include "system.h"
00010
00011 #ifdef _DEBUG
00012 #undef THIS_FILE
00013 static char THIS_FILE[]=__FILE__;
00014 #define new DEBUG_NEW
00015 #endif
00016
00017 fsTrayIconMgr::fsTrayIconMgr()
00018 {
00019 m_pIcons = NULL;
00020 m_iCurIconIndex = 0;
00021
00022 m_cbNIDSize = GetShell32Version () >= 5 ? sizeof (NOTIFYICONDATA) : NOTIFYICONDATA_V1_SIZE;
00023 }
00024
00025 fsTrayIconMgr::~fsTrayIconMgr()
00026 {
00027
00028 }
00029
00030 BOOL fsTrayIconMgr::Create(HWND hWnd, UINT *pIcons, UINT cIcons, LPCSTR pszTooltip, UINT uCallbackMsg)
00031 {
00032 LoadIcons (pIcons, cIcons);
00033 m_hWnd = hWnd;
00034 m_uCallbackMsg = uCallbackMsg;
00035 m_strTip = pszTooltip;
00036
00037 return InitializeTrayIcon ();
00038 }
00039
00040 void fsTrayIconMgr::LoadIcons(UINT *pIcons, UINT cIcons)
00041 {
00042 if (m_pIcons)
00043 delete [] m_pIcons;
00044
00045 fsnew (m_pIcons, HICON, cIcons);
00046 m_cIcons = cIcons;
00047
00048 for (UINT i = 0; i < cIcons; i++)
00049 m_pIcons [i] = SICOEX (pIcons [i], 16, 16);
00050 }
00051
00052 void fsTrayIconMgr::Remove()
00053 {
00054 NOTIFYICONDATA data;
00055
00056 data.cbSize = m_cbNIDSize;
00057 data.hWnd = m_hWnd;
00058 data.uID = m_nID;
00059
00060 Shell_NotifyIcon (NIM_DELETE, &data);
00061 }
00062
00063 BOOL fsTrayIconMgr::ShowIcon(int iIndex)
00064 {
00065 NOTIFYICONDATA data;
00066
00067 if (m_pIcons == NULL)
00068 return FALSE;
00069
00070 data.cbSize = m_cbNIDSize;
00071 data.hIcon = m_pIcons [m_iCurIconIndex = iIndex];
00072 data.hWnd = m_hWnd;
00073 data.uFlags = NIF_ICON;
00074 data.uID = m_nID;
00075
00076 return Shell_NotifyIcon (NIM_MODIFY, &data);
00077 }
00078
00079 BOOL fsTrayIconMgr::InitializeTrayIcon()
00080 {
00081 NOTIFYICONDATA data;
00082
00083 data.cbSize = m_cbNIDSize;
00084 data.hIcon = m_pIcons [0];
00085 data.hWnd = m_hWnd;
00086 strcpy (data.szTip, m_strTip);
00087 data.uCallbackMessage = m_uCallbackMsg;
00088 data.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
00089 data.uID = m_nID = 0;
00090
00091 return Shell_NotifyIcon (NIM_ADD, &data);
00092 }
00093
00094 void fsTrayIconMgr::TestIcon()
00095 {
00096 if (FALSE == ShowIcon (m_iCurIconIndex))
00097 {
00098 InitializeTrayIcon ();
00099 ShowIcon (m_iCurIconIndex);
00100 }
00101 }
00102
00103 BOOL fsTrayIconMgr::ShowBalloon(LPCSTR pszInfo, LPCSTR pszInfoTitle, DWORD dwNiifIcon)
00104 {
00105 if (GetShell32Version () < 5)
00106 return FALSE;
00107
00108 NOTIFYICONDATA data;
00109
00110 data.cbSize = m_cbNIDSize;
00111 data.hWnd = m_hWnd;
00112 data.uID = m_nID;
00113 data.uFlags = NIF_INFO;
00114
00115 if (strlen (pszInfo) > 255)
00116 {
00117 strncpy (data.szInfo, pszInfo, 255);
00118 data.szInfo [255] = 0;
00119 }
00120 else
00121 strcpy (data.szInfo, pszInfo);
00122
00123 if (strlen (pszInfoTitle) > 63)
00124 {
00125 strncpy (data.szInfoTitle, pszInfoTitle, 63);
00126 data.szInfoTitle [63] = 0;
00127 }
00128 else
00129 strcpy (data.szInfoTitle, pszInfoTitle);
00130
00131 data.dwInfoFlags = dwNiifIcon;
00132 data.uTimeout = UINT_MAX;
00133
00134 return Shell_NotifyIcon (NIM_MODIFY, &data);
00135 }