Comment afficher du texte dans l’icône de la barre d’état système avec l’API win32?

Essayez de créer une application de petit moniteur qui affiche l’utilisation actuelle d’Internet sous forme de pourcentage dans la barre d’état système en C à l’aide de l’API win32.

Vouloir également utiliser un arrière-plan ou un texte de couleur en fonction de la quantité utilisée par rapport au nombre de jours restant dans le mois

EDIT: Pour clarifier, je veux que l’icône de la barre des tâches soit dynamic. Au fur et à mesure que le pourcentage change, je mets à jour l’icône de la barre d’état système. Vous recherchez une solution qui utilise tout simplement le vieil win32 (c’est-à-dire sans MFC ni WTL).

Ok voici ma solution 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; } 

La barre d’état système accepte uniquement les icons à afficher, pas le texte.

Pour obtenir un texte affiché ici, vous devez d’abord créer un bitmap de mémoire, dessiner votre texte dessus, puis convertir ce bitmap de mémoire en icône de mémoire et laisser la barre d’état système afficher cette icône.

Exemple de code ci-dessous:

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

Par texte, vous voulez dire “conseils”?

En supposant que vous ayez votre icône dans la barre d’état système

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