Extended Multi Size Multi Color Toolbar!


Desktop-as-a-Service Designed for Any Cloud ? Nutanix Frame

This package differ from other package from the point of view that it support small or large icon. Text or no text and 16 or 256 colors. You can use icon or bitmap to create the toolbar.

It is using the explorer toolbar, so you need at least explorer 3. It's easy and nice to use.

This is a sample on how to use it. For further information, take a look at the sample application zip files.

    // This is a toolbar using bitmap resource file.
    if (!m_stdToolBar.Create(this) ||
        TRACE0("Failed to create toolbar\n");
        return -1;      // fail to create

    m_stdToolBar.SetBitmap( IBD_SM,         COOBmpToolBar::SmallHot,         RGB( 30, 179, 223 ) );
    m_stdToolBar.SetBitmap( IDB_SM_BW,      COOBmpToolBar::SmallStandard,   RGB( 30, 179, 223 ) );
    m_stdToolBar.SetBitmap( IDB_SM_DB,      COOBmpToolBar::SmallDisable,     RGB( 172, 172, 172 ) );
    m_stdToolBar.SetBitmap( IDB_LG,         COOBmpToolBar::LargeHot,         RGB( 33, 231, 222 ) );
    m_stdToolBar.SetBitmap( IDB_LG_BW,      COOBmpToolBar::LargeStandard,   RGB( 33, 231, 222 ) );
    m_stdToolBar.SetBitmap( IDB_LG_DB,      COOBmpToolBar::LargeDisable,     RGB( 170, 170, 170 ) );
    m_stdToolBar.SetBitmap( IDB_SM_16,      COOBmpToolBar::SmallHot,         RGB( 0, 255, 255 ), false );
    m_stdToolBar.SetBitmap( IDB_SM_BW_16,   COOBmpToolBar::SmallStandard,   RGB( 0, 255, 255 ), false );
    m_stdToolBar.SetBitmap( IDB_SM_DB_16,   COOBmpToolBar::SmallDisable,     RGB( 192, 192, 192 ), false );
    m_stdToolBar.SetBitmap( IDB_LG_16,      COOBmpToolBar::LargeHot,         RGB( 0, 255, 255 ), false );
    m_stdToolBar.SetBitmap( IDB_LG_BW_16,   COOBmpToolBar::LargeStandard,   RGB( 0, 255, 255 ), false );
    m_stdToolBar.SetBitmap( IDB_LG_DB_16,   COOBmpToolBar::LargeDisable,     RGB( 192, 192, 192 ), false );

    // set button to dropdown list
    m_stdToolBar.SetButtonDropDown( ID_FILE_OPEN );
    m_stdToolBar.SetButtonDropDown( ID_FILE_SAVE );

    // This is a toolbar using bitmap resource file.
    if (!m_IconToolBar.Create(this) ||
        TRACE0("Failed to create toolbar\n");
        return -1;      // fail to create


    // ... Standard stuff ...

Download demo project - 212KB

Download source - 13KB

Date Posted: 7/31/98


  • use CustomDraw to erase the separator in vertical position

    Posted by Legacy on 05/29/2003 07:00am

    Originally posted by: jiulun

    The separator is somehow associated with the previous button. 
    If you set dropdown type for one button, which is wider than the normal one.
    So the separators will come when the toolbar in vertical position.

    This can be solved by using toolbar's CustomDraw in the postpaint stage.
    Separators are redrawn with the buttonface color, so they will disappear.

    Add the prototype in OOExToolBar.hpp like this
    afx_msg void OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult);

    and add the message map here

    void COOExToolBar::OnCustomDraw(NMHDR *pNMHDR, LRESULT *pResult)
    // Only do this if the style is flat. In other style, there is no separator.
    if ((::GetWindowLong(m_hWnd, GWL_STYLE) & TBSTYLE_FLAT) == TBSTYLE_FLAT)

    CDC* pDC = CDC::FromHandle(lpNMCD->hdc);

    switch (lpNMCD->dwDrawStage)
    // requst the postpaint message

    // If the toolbar is in vertical position, erase the separator
    if(m_dwStyle & CBRS_ORIENT_VERT)

    void COOExToolBar::EraseSeparators(CDC* pDC)
    CToolBarCtrl& bar = GetToolBarCtrl();

    int nButtons = bar.GetButtonCount();
    for (int i = 0; i < nButtons; i++)
    TBBUTTON tbb;
    GetButton(i, &tbb);
    if (tbb.fsStyle & TBSTYLE_SEP && i>0)
    TBBUTTON prevButton;
    GetButton(i - 1, &prevButton);
    if (prevButton.fsStyle & TBSTYLE_SEP)

    CRect rcItem;
    bar.GetItemRect( i, rcItem );

    CRect rcPrevItem;
    bar.GetItemRect( i - 1, rcPrevItem);

    rcPrevItem += CPoint(rcPrevItem.Width(), 0);
    rcPrevItem.right = rcPrevItem.left + rcItem.Width();
    rcItem = rcPrevItem;

    // The buttonface color maybe different in different style
    // comctl32.dll version >= 4.71, clrBtnFace can be got of the NMTBCUSTOMDRAW passed by customdraw
    CBrush br(::GetSysColor(COLOR_BTNFACE));
    CBrush* pOldBrush = pDC->SelectObject(&br);
    const CRect& rc=rcItem;
    pDC->PatBlt(rc.left, rc.top, rc.Width(), rc.Height(), PATCOPY);

    Where function EraseSeparators is one added to the class.

  • horizontal separators in vertical position

    Posted by Legacy on 04/08/2002 07:00am

    Originally posted by: Frog


    if you dock the toolbar vertical, the horizonal separators are still there. Do you know a way to remove them (in vertical mode).


  • BUG: Icon text appears after changing windows scheme

    Posted by Legacy on 03/25/2002 08:00am

    Originally posted by: Simon

    When changing some window's appearance (e.g. changing the the windows scheme) the toolbar icons (after refreshing its parent) are shown with text (although SetTextMode(false) was called on creation).
    Have any solution ?
    THANKS! (really cool toolbar)

  • Any upgrade?

    Posted by Legacy on 02/08/2002 08:00am

    Originally posted by: Ray Ku

    Your toolbar is really nice although there are some bugs. Do you have any upgrade? Can I implement your codes and toolbar bitmaps into my project?

    Thank you?

    Ray Ku

  • Unfortunatly...

    Posted by Legacy on 02/08/2002 08:00am

    Originally posted by: Pat Laplante

    I haven't touch a window machine in ages. I've done mostly MacIntosh work in the past 2 years (porting windows application to the mac osx and os9).

    So I don't even remember how the toolbar is working! I did that under VC5 at the time with an old version of CommCtrl.dll.

    You could fix it and post your fix to the site!


  • Upgrade!

    Posted by Legacy on 07/09/2001 07:00am

    Originally posted by: pinktown

    The code have bugs,where have upgrade code?

  • don't get OnSetText message when placing text to the right side

    Posted by Legacy on 04/25/2001 07:00am

    Originally posted by: Joel

    Changed this:
    ModifyStyle( 0, TBSTYLE_FLAT);
    to this:
    ModifyStyle( 0, TBSTYLE_FLAT | TBSTYLE_LIST );

    to enable the text to be to the right instead of the bottom.

    Also made a couple of minor modifications to size the button correctly when the text is there.

    However, after a couple of clicks back a forth from text to none I fail to get the OnSetText message to the MainFrame so the recalcsize never gets called.

    Wierd, have any hints?

  • fix: flickering caused by outdated bug-fix

    Posted by Legacy on 05/13/2000 07:00am

    Originally posted by: Georg Schreiber

    in OOExToolBar.cpp there is a bug-fix in the method CCoolCmdUI::Enable which causes the toolbar to flicker on machindes with COMCTL32 V5.81 installed.

    the flickering is caused by a bug-fix for a bug thats no longer existing in V5.81 of COMCTL32.

    remove the following line to avoid this problem:

    if ( !bOn )
    // nNewStyle &= ~TBBS_PRESSED; <== remove this one

  • Please send me

    Posted by Legacy on 12/30/1999 08:00am

    Originally posted by: Madhu

    hello sir,
    i could not download your demo project.i tried it many times.But all the time i failed.would you please send it to me?i have mentioned my mail id.

  • A word about disabled bitmaps...

    Posted by Legacy on 09/13/1999 07:00am

    Originally posted by: Vitaly V. Kapara

    You can avoid creating disabled bitmaps and make Windows to draw them. Simply change OOExToolBar.cpp:

    void COOExToolBar::SetDisableImageList(
    CImageList* pList ) // @Parm The normal image list.
    CWnd* pWnd = &GetToolBarCtrl();
    >>> Add here
    if (pList->GetImageCount()>0)
    pWnd->SendMessage( TB_SETDISABLEDIMAGELIST, 0, ( LPARAM ) ( HIMAGELIST ) *pList );
    >>> Add here
    else pWnd->SendMessage( TB_SETDISABLEDIMAGELIST, 0, 0);

    After that, if you don't set SmallDisable or LargeDisable, you'll have all disabled buttons drawn by Windows !

    Voila !

  • Loading, Please Wait ...

  • You must have javascript enabled in order to post comments.

Leave a Comment
  • Your email address will not be published. All fields are required.

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date