How to display text in system tray icon with win32 API?

后端 未结 3 1030
萌比男神i
萌比男神i 2021-02-06 02:26

Trying to create a small monitor application that displays current internet usage as percentage in system tray in C using win32 API.

Also wanting to use colour backgrou

3条回答
  •  走了就别回头了
    2021-02-06 03:17

    Okay here is my win32 solution:

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

提交回复
热议问题