Extended Multi Size Multi Color Toolbar!

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


  • More concessions with herveleger, more coins mistaken!

    Posted by jonemuty on 04/20/2013 01:38am

    tittle of san quentin quailtoms kids outlet burberry sale picayune shavergenuine burberry uk exaltationtoms shoes outlet toms sale cheap come awaytoms shoes cheap vestalherve leger outlet hawk

  • use CustomDraw to erase the separator in vertical position

    Posted by Legacy on 05/29/2003 12: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 12: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 12: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)

  • Unfortunatly...

    Posted by Legacy on 02/08/2002 12: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!


  • Any upgrade?

    Posted by Legacy on 02/08/2002 12: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

  • Upgrade!

    Posted by Legacy on 07/09/2001 12: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 12: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 12: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 12: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.

  • Loading, Please Wait ...

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

Top White Papers and Webcasts

  • Live Event Date: May 6, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT While you likely have very good reasons for remaining on WinXP after end of support -- an estimated 20-30% of worldwide devices still are -- the bottom line is your security risk is now significant. In the absence of security patches, attackers will certainly turn their attention to this new opportunity. Join Lumension Vice President Paul Zimski in this one-hour webcast to discuss risk and, more importantly, 5 pragmatic risk mitigation techniques …

  • The impact of a data loss event can be significant. Real-time data is essential to remaining competitive. Many companies can no longer afford to rely on a truck arriving each day to take backup tapes offsite. For most companies, a cloud backup and recovery solution will eliminate, or significantly reduce, IT resources related to the mundane task of backup and allow your resources to be redeployed to more strategic projects. The cloud - can now be comfortable for you – with 100% recovery from anywhere all …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds