Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Badges for Windows 7

0.00/5 (No votes)
9 Mar 2012 1  
Short description how to create a sexy badge for windows 7 taskbar

Introduction 

How to use ITaskbarList3 in C++ to add overlay icon into taskbar. 

Using the code

Before using ITaskbarList3, we must receive TaskbarButtonCreated message from system. First we must register this message.

s_uTBBC = RegisterWindowMessage(L"TaskbarButtonCreated");

In our message loop we can catch this message and call our function:

if( message == s_uTBBC ) {
    onTaskbarButtonCreated(wParam, lParam);
}

Create instance of ITaskbarList3 and set the overlay icon.

static LRESULT onTaskbarButtonCreated(WPARAM wParam, LPARAM lParam) {

    HRESULT result = CoCreateInstance(CLSID_TaskbarList, NULL, 
                        CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&m_pTaskBarlist));

    if (SUCCEEDED(result)) { 
        result = m_pTaskBarlist->HrInit(); 
        if (SUCCEEDED(result)) {

            HICON icon = createBadgeIcon(_T("78"));
            m_pTaskBarlist->SetOverlayIcon(m_hWnd, icon, _T("Status"));
            DeleteObject(icon);

        }
    }

    return 0;
}

I use GDI+ for creating badge icon. For create cool small ellipse I use circle (letter 'l') from Wingdings font :)

static HICON createBadgeIcon(const TCHAR *value) {

    Color bagdeColor = Color(233, 0, 0);
    Color textColor = Color(244, 244, 244);
//
    Bitmap *bitmap = new Bitmap(24, 24, PixelFormat32bppARGB);
    m_Graphics = Graphics::FromImage(bitmap);
//
    StringFormat format(StringFormatFlagsNoWrap);
    format.SetAlignment(StringAlignmentCenter); 
    format.SetLineAlignment(StringAlignmentCenter);
//
    m_Graphics->DrawString(_T("l"), 1, 
                            new Font(_T("Wingdings"), 24), 
                            RectF(1, 2, 24, 24), 
                            &format, 
                            new SolidBrush(bagdeColor));
    m_Graphics->DrawString(value, wcslen(value), 
                            new Font(_T("Calibri"), 8), 
                            RectF(1, 2, 24, 20), 
                            &format, new SolidBrush(textColor));
//
    HICON icon;
    bitmap->GetHICON(&icon);
    // Cleanup
    delete bitmap;
    return icon;
}

History

Version 1.0.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here