2010年8月27日 星期五

System tray

System tray

右下角的AP好像稱為 「System tray」or「托盤」 的樣子@@

//將程式置於右下角(system tray)
NOTIFYICONDATA niData;
ZeroMemory(&niData,sizeof(NOTIFYICONDATA));
niData.cbSize = sizeof(NOTIFYICONDATA);
niData.uID = 1;
niData.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
niData.hIcon = (HICON)LoadImage(hInstance,MAKEINTRESOURCE(IDI_SMALL),
IMAGE_ICON, GetSystemMetrics(SM_CXSMICON),GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);
niData.hWnd = hWnd;
niData.uCallbackMessage = SWM_TRAYMSG;

lstrcpyn(niData.szTip, _T("WIPEO V0.01"), sizeof(niData.szTip)/sizeof(TCHAR));

Shell_NotifyIcon(NIM_ADD,&niData);


網路上找到的範例…
其中MAKEINTRESOURCE(IDI_SMALL)的IDI_SMALL
是在*.rc下的ICON (右下角用到的稱為「ICON」)




嗯,還是不瞭解MAKEINTRESOURCE的作用@@

keyword:
Shell_NotifyIcon

【轉貼:Here
基本上在 System Tray 上的 程式 只是一個 notify icon,由 Win32 System 中的 Shell32.DLL 去實做,因此應用程式要使用Win32 API中的 Shell_NotifyIcon() 去在System Tray 上掛上一個 icon resource, 而關於這個 Icon Resource 的Handle是透過 NOTIFYICONDATA 結構傳遞地。
當成功掛上後,就會在 System Tray 上發現新增一個 Icon,但是此時應用程式的 GUI 還是出現在畫面上,因此就需要去使用ShowWindow(hWnd, SW_HIDE) 去隱藏應用程式,而在WndProc 中處理 WM_TRAYICON Message,當發生此訊息時 wParam 會是之前在 NOTIFYICONDATA 的 uID,用LOWWORE(lParam)去處理
WM_RBUTTONUP、WM_LBUTTONDBLCLK等訊息,可以得到一般常見的System Tray Application的效果

ref:
Here
Here

沒有留言:

張貼留言