User
Не нужно больше иконок - надо создавать иконки на лету, рисуя на них значение процентов. Неоптимизированный пример кода для создания иконки из текста:
HICON CreateTextIcon( HWND hWnd, int size, TCHAR *szText) { HDC hdc = GetDC( hWnd ); HDC hdcMem = CreateCompatibleDC( hdc ); HBITMAP hBitmap = CreateCompatibleBitmap( hdc, size, size ); HBITMAP hBitmapMask = CreateCompatibleBitmap( hdc, size, size ); ReleaseDC( hWnd, hdc ); SelectObject( hdcMem, hBitmap ); HBRUSH brush = CreateSolidBrush( RGB(0,0,0) ); SelectObject( hdcMem, brush ); PatBlt( hdcMem, 0, 0, size, size, PATCOPY ); // Draw percentage int font_size = lstrlen(szText) < 3 ? size : (3*size)/4; HFONT hFont = CreateFont( font_size, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET, 0, 0, 0, 0, TEXT ("Arial") ); HFONT hFont_orig = (HFONT) SelectObject( hdcMem, hFont ); SetBkColor( hdcMem, RGB(0,0,0) ); SetTextColor( hdcMem, RGB(255,255,255) ); RECT rect; SetRect( &rect, 0, 0, size, size ); DrawText( hdcMem, szText, lstrlen (szText), &rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE ); ICONINFO iconInfo; iconInfo.fIcon = TRUE; iconInfo.xHotspot = 0; iconInfo.yHotspot = 0; iconInfo.hbmMask = hBitmapMask; iconInfo.hbmColor = hBitmap; HICON hIcon = CreateIconIndirect( &iconInfo ); SelectObject( hdcMem, hFont_orig ); DeleteObject( hFont ); DeleteObject( brush ); DeleteObject( hBitmapMask ); DeleteObject( hBitmap ); DeleteDC( hdcMem ); return hIcon; }
Не нужно больше иконок - надо создавать иконки на лету, рисуя на них значение процентов. Неоптимизированный пример кода для создания иконки из текста: