18 #pragma comment(lib, "shell32.lib")
107 m_icondata.uID = uID;
108 m_icondata.uCallbackMessage = ::RegisterWindowMessage(
CStr::Fmt(_T(
"__SSA_%u"), uID));
109 m_icondata.ResetFlag();
112 m_uTaskbarCreatedMessage = ::RegisterWindowMessage(_T(
"TaskbarCreated"));
130 m_piListener = piListener;
144 if ( message == m_uTaskbarCreatedMessage )
149 m_Modify(m_icondata);
153 if ( message != m_icondata.uCallbackMessage )
162 case WM_LBUTTONDBLCLK:
165 case WM_RBUTTONDBLCLK:
170 if ( ! m_syncClick.
Lock(0) )
176 POINT tPoint = { 0x7FFF, 0x7FFF };
177 ::GetCursorPos(&tPoint);
178 ::SetForegroundWindow(m_icondata.hWnd);
179 ::SetFocus(m_icondata.hWnd);
180 if ( m_piListener != NULL )
185 if ( lParam == WM_RBUTTONDOWN )
189 if ( lParam == WM_RBUTTONUP )
191 rc = !!
ShowMenu(tPoint, TPM_LEFTALIGN | TPM_RIGHTBUTTON);
194 if ( lParam == WM_LBUTTONUP )
196 rc = !!
ShowMenu(tPoint, TPM_LEFTALIGN);
211 bool Create(HWND hWnd, HICON hIcon, LPCTSTR lpTip = NULL)
213 m_icondata.hIcon = hIcon;
214 m_icondata.hWnd = hWnd;
215 m_icondata.SetTip(lpTip);
216 m_icondata.ResetFlag();
217 m_Modify(m_icondata);
229 ::Shell_NotifyIcon(NIM_DELETE, m_icondata);
264 m_icondata.hIcon = hIcon;
265 m_icondata.ResetFlag();
266 m_Modify(m_icondata);
278 m_icondata.SetTip(lpTip);
279 m_icondata.ResetFlag();
280 m_Modify(m_icondata);
284#if _WIN32_IE >= 0x0500
313 STRLIB::Copy(m_icondata.szInfoTitle, s.
Left(
sizeof(m_icondata.szInfoTitle) - 1));
316 m_icondata.dwInfoFlags = eIcon;
317 m_icondata.uTimeout = dwTimeout;
319 m_icondata.uFlags |= 0x00000010;
320 m_Modify(m_icondata);
321 m_icondata.uFlags &= ~0x00000010;
334 m_icondata.szInfoTitle[0] = 0;
335 m_icondata.szInfo[0] = 0;
337 m_icondata.uTimeout = 0;
339 m_icondata.uFlags |= 0x00000010;
340 m_Modify(m_icondata);
341 m_icondata.uFlags &= ~0x00000010;
355 DWORD
ShowMenu(
const POINT& po, UINT flag = TPM_LEFTALIGN | TPM_RIGHTBUTTON)
357 DWORD
ShowMenu(
const POINT& po, UINT flag = TPM_LEFTALIGN)
363 HMENU hMenu = ::LoadMenu(hIns, MAKEINTRESOURCE(m_idMenu));
366 HMENU h = ::GetSubMenu(hMenu, 0);
367 DWORD r = ::TrackPopupMenuEx(h, flag, po.x, po.y, m_icondata.hWnd, NULL);
369 ::DestroyMenu(hMenu);
373 else if ( m_hMenu != NULL )
375 return ::TrackPopupMenuEx(m_hMenu, flag, po.x, po.y, m_icondata.hWnd, NULL);
392 UINT uCallbackMessage;
394 #if _WIN32_IE < 0x0500
405 TCHAR szInfoTitle[64];
407 #if _WIN32_IE >= 0x0600
415 cbSize =
sizeof(CIconData);
418 operator NOTIFYICONDATA*(void)
420 return reinterpret_cast<NOTIFYICONDATA*
>(
this);
426 void SetTip(LPCTSTR lpTip)
437 uFlags = NIF_MESSAGE;
452 void m_Modify(NOTIFYICONDATA* P)
454 if ( m_boShow && ::Shell_NotifyIcon(NIM_MODIFY, P) )
460 if ( ::Shell_NotifyIcon(NIM_ADD, P) )
464 if ( _GetLastError(
"Shell_NotifyIcon") != ERROR_TIMEOUT )
469 if ( ::Shell_NotifyIcon(NIM_MODIFY, P) )
476 CIconData m_icondata;
480 IListener* m_piListener;
482 UINT m_uTaskbarCreatedMessage;
CStrT Left(size_t iSize) const
[作成] 範囲取得.
static CStrT Fmt(const TCHAR *lpszFormat,...)
[作成] 書式付き文字列作成
virtual bool Lock(DWORD dwTime=INFINITE) const
[排他] ロック
virtual void Unlock(void) const
[排他] アンロック
virtual ~CTasktrayIcon(void)
デストラクタ
void ModifyIcon(HICON hIcon)
[設定] アイコン変更
void ModifyTip(LPCTSTR lpTip)
[設定] チップ内容変更
void SetListener(IListener *piListener)
[登録] リスナー登録
void SetMenu(int id=0)
[設定] メニュー変更(ID指定)
void ShowInformation(EInfoIcon eIcon, LPCTSTR lpszTitle, LPCTSTR lpszMessage, DWORD dwTimeout=0)
[設定] インフォメーション表示
CTasktrayIcon(UINT uID=0)
コンストラクタ
@ EII_NsWarning
警告マーク(音なし)
void HideInformation(void)
[設定] インフォメーション非表示
void SetMenu(HMENU h=NULL)
[設定] メニュー変更(ハンドル指定)
bool Create(HWND hWnd, HICON hIcon, LPCTSTR lpTip=NULL)
[作成] アイコン作成
DWORD ShowMenu(const POINT &po, UINT flag=TPM_LEFTALIGN|TPM_RIGHTBUTTON)
[表示] メニュー表示.
void Hide(void)
[削除] アイコン消去
bool RelayEvent(UINT message, WPARAM wParam, LPARAM lParam)
[処理] イベント中継
void Copy(LPSTR _dst, LPCSTR src)
[複製] 文字列コピー(ASCII/SJIS用)
void Zero(V &value)
[設定] ゼロクリア.
HINSTANCE GetInstanceHandleByTnb(EInstanceType type=EI_Process)
[取得] インスタンスハンドル取得.
virtual ~IListener(void)
デストラクタ
virtual void OnNotifyTasktrayIcon(UINT uMsg, const POINT &tPoint)=0
[通知] アイコン操作通知