試圖創建顯示當前互聯網的使用如在使用Win32 API的在空調系統托盤百分比小的顯示器應用。如何使用win32 API顯示系統托盤圖標中的文本?
也想用彩色背景或彩色文本基於多少相對於留在一個月的幾天內使用。
編輯:澄清我希望系統托盤圖標是動態的。隨着百分比變化,我更新系統托盤圖標。尋找只使用普通的舊式win32(即沒有MFC或WTL)的解決方案。
試圖創建顯示當前互聯網的使用如在使用Win32 API的在空調系統托盤百分比小的顯示器應用。如何使用win32 API顯示系統托盤圖標中的文本?
也想用彩色背景或彩色文本基於多少相對於留在一個月的幾天內使用。
編輯:澄清我希望系統托盤圖標是動態的。隨着百分比變化,我更新系統托盤圖標。尋找只使用普通的舊式win32(即沒有MFC或WTL)的解決方案。
好吧,這裏是我的Win32的解決方案:
HICON CreateSmallIcon(HWND hWnd)
{
static TCHAR *szText = TEXT ("100");
HDC hdc, hdcMem;
HBITMAP hBitmap = NULL;
HBITMAP hOldBitMap = NULL;
HBITMAP hBitmapMask = NULL;
ICONINFO iconInfo;
HFONT hFont;
HICON hIcon;
hdc = GetDC (hWnd);
hdcMem = CreateCompatibleDC (hdc);
hBitmap = CreateCompatibleBitmap (hdc, 16, 16);
hBitmapMask = CreateCompatibleBitmap (hdc, 16, 16);
ReleaseDC (hWnd, hdc);
hOldBitMap = (HBITMAP) SelectObject (hdcMem, hBitmap);
PatBlt (hdcMem, 0, 0, 16, 16, WHITENESS);
// Draw percentage
hFont = CreateFont (12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
TEXT ("Arial"));
hFont = (HFONT) SelectObject (hdcMem, hFont);
TextOut (hdcMem, 0, 0, szText, lstrlen (szText));
SelectObject (hdc, hOldBitMap);
hOldBitMap = NULL;
iconInfo.fIcon = TRUE;
iconInfo.xHotspot = 0;
iconInfo.yHotspot = 0;
iconInfo.hbmMask = hBitmapMask;
iconInfo.hbmColor = hBitmap;
hIcon = CreateIconIndirect (&iconInfo);
DeleteObject (SelectObject (hdcMem, hFont));
DeleteDC (hdcMem);
DeleteDC (hdc);
DeleteObject (hBitmap);
DeleteObject (hBitmapMask);
return hIcon;
}
根據文本你的意思「提示」?
假設你有你的圖標在系統托盤
NOTIFYICONDATA _stNotifyIconData;
// For a simple Tip
_stNotifyIconData.uFlags = NIF_TIP;
strcpy_s(_stNotifyIconData.szTip, "Little Tip"); // Copy Tip
Shell_NotifyIcon(NIM_MODIFY, &_stNotifyIconData);
// For a Ballon Tip
_stNotifyIconData.uFlags = NIF_INFO;
strcpy_s(_stNotifyIconData.szInfoTitle, "Title of the Ballon"); // Title
strcpy_s(_stNotifyIconData.szInfo, "Text..."); // Copy Tip
_stNotifyIconData.uTimeout = 3000; // 3 Seconds
_stNotifyIconData.dwInfoFlags = NIIF_INFO;
Shell_NotifyIcon(NIM_MODIFY, &_stNotifyIconData);
無不是提示。我想讓這個圖標成爲一個數字。 – grom 2009-01-19 10:32:28
系統托盤只接受圖標顯示,而不是文字。
到那裏顯示文本,你必須首先創建一個內存位圖,畫上的文字,那麼內存位圖轉換爲內存圖標,並有系統托盤顯示,圖標。
如下代碼示例:
CDC dcMem;
dcMem.CreateCompatibleDC(NULL);
CBitmap* pOld = dcMem.SelectObject(&m_bmpIcon);
CBrush back(RGB(0,0,0));
dcMem.FillRect(CRect(0,0,16,16), &back);
CBrush brush(COLORDOWN);
dcMem.FillRect(rcRecv, &brush);
dcMem.SelectObject(pOld);
HICON hIcon = CreateIconIndirect(&m_TaskBarIconInfo);
參見:http://support.microsoft.com/kb/318876 – Paul 2014-09-06 12:38:12