Search
Write a publication
Pull to refresh
0
0

User

Send message

Не нужно больше иконок - надо создавать иконки на лету, рисуя на них значение процентов. Неоптимизированный пример кода для создания иконки из текста:

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;
}

Information

Rating
11,007-th
Registered
Activity