参考:
---------------------------------------------------------
---------------------------------------------------------
//头文件:class CPaletteBar : public CToolBar
{
// Constructor
public:
    CPaletteBar();
    void SetColumns(UINT nColumns);
    UINT GetColumns() { return m_nColumns; };// Attributes
public:// Operations
public:// Implementation
public:
    virtual ~CPaletteBar();
#ifdef _DEBUG
    virtual void AssertValid() const;
    virtual void Dump(CDumpContext& dc) const;
#endifprotected:
    UINT m_nColumns;// Generated message map functions
protected:
    //{{AFX_MSG(CPaletteBar)
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};
------------------------------------------------------------
------------------------------------------------------------
//实现:#include "stdafx.h"
#include "ctrlbars.h"#include "palette.h"#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CPaletteBarBEGIN_MESSAGE_MAP(CPaletteBar, CToolBar)
    //{{AFX_MSG_MAP(CPaletteBar)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CPaletteBar construction/destructionCPaletteBar::CPaletteBar()
{
    m_nColumns = 2;
    m_cxLeftBorder = 5;
    m_cyTopBorder = 5;
    m_cxRightBorder = 5;
    m_cyBottomBorder = 5;
}CPaletteBar::~CPaletteBar()
{
}/////////////////////////////////////////////////////////////////////////////
// CPaletteBar diagnostics#ifdef _DEBUG
void CPaletteBar::AssertValid() const
{
    CToolBar::AssertValid();
}void CPaletteBar::Dump(CDumpContext& dc) const
{
    CToolBar::Dump(dc);
}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////
// CPaletteBar message handlersvoid CPaletteBar::SetColumns(UINT nColumns)
{
    m_nColumns = nColumns;
    int nCount = GetToolBarCtrl().GetButtonCount();    for (int i = 0; i < nCount; i++)
    {
        UINT nStyle = GetButtonStyle(i);
        BOOL bWrap = (((i + 1) % nColumns) == 0);
        if (bWrap)
            nStyle &brvbar;= TBBS_WRAPPED;
        else
            nStyle &= ~TBBS_WRAPPED;
        SetButtonStyle(i, nStyle);
    }    Invalidate();
    GetParentFrame()->RecalcLayout();
}
------------------------------------------------------------
------------------------------------------------------------
//使用:BOOL CMainFrame::CreatePaletteBar()
{
    if (!m_wndPaletteBar.Create(this, WS_CHILD &brvbar; WS_VISIBLE &brvbar; CBRS_SIZE_FIXED &brvbar;
        CBRS_TOP &brvbar; CBRS_TOOLTIPS, ID_PALETTEBAR) &brvbar;&brvbar;
        !m_wndPaletteBar.LoadBitmap(IDB_PALETTE) &brvbar;&brvbar;
        !m_wndPaletteBar.SetButtons(palette,
          sizeof(palette)/sizeof(UINT)))
    {
        TRACE0("Failed to create toolbar\n");
        return FALSE;      // fail to create
    }    m_wndPaletteBar.SetWindowText(_T("Palette"));
    m_wndPaletteBar.EnableDocking(0);    // Create the Palette.  We are using hardcoded numbers for ease here
    // normally the location would be read in from an ini file.
    CPoint pt(GetSystemMetrics(SM_CXSCREEN) - 100,
        GetSystemMetrics(SM_CYSCREEN) / 3);    m_wndPaletteBar.SetColumns(3);
    FloatControlBar(&m_wndPaletteBar, pt);    return TRUE;
}------------------------------------------------------------
------------------------------------------------------------
//调用:int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;    EnableDocking(CBRS_ALIGN_ANY);    if (!CreateToolBar())
        return -1;    
    if (!CreatePaletteBar())
        return -1;    return 0;
}
注:不是我写的。是他:chinaprogrammer(职业道德&职业水准)