有4个工具栏按钮,如何自定义工具栏,让工具栏按钮呈两行两列排列?

解决方案 »

  1.   

    m_wndDrawToolBar.SetColumns(2);m_wndDrawToolBar.EnableDocking(CBRS_ALIGN_ANY);     //最好是不要停靠了
      

  2.   

    1.不能拖成两行两列的,2.没有这个函数的SetColumns()。
      

  3.   

    上面第二行应该注释掉
    if (!m_wndDrawToolBar.CreateEx(this, TBSTYLE_FLAT,WS_CHILD | WS_VISIBLE | CBRS_SIZE_FIXED |
    CBRS_TOP | CBRS_TOOLTIPS) ||
    !m_wndDrawToolBar.LoadToolBar(IDR_DRAW_EDIT_MENU))
    {
    TRACE0("Failed to create toolbar\n");
    return FALSE;      
    }

    m_wndDrawToolBar.SetWindowText(_T("工具栏"));
    m_wndDrawToolBar.EnableDocking(0);                   //最好是不要停靠了

            m_wndDrawToolBar.SetColumns(2);                      //设置成两列 FloatControlBar(&m_wndDrawToolBar, pt); ShowControlBar(&m_wndDrawToolBar,SW_SHOW,FALSE);
      

  4.   

    呵呵,,是我不对,   m_wndDrawToolBar 是CDrawToolBar 类的对象DrawToolBar.h#pragma once
    class CDrawToolBar : public CToolBar
    {
    DECLARE_DYNAMIC(CDrawToolBar)public:
    CDrawToolBar(); void SetColumns(UINT nColumns);
    UINT GetColumns() { return m_nColumns; };    virtual ~CDrawToolBar();
        protected:
       UINT m_nColumns;
        protected:
       DECLARE_MESSAGE_MAP()
    };DrawToolBar.cpp// DrawToolBar.cpp : 实现文件
    //#include "stdafx.h"
    #include "DrawToolBar.h"
    // CDrawToolBarIMPLEMENT_DYNAMIC(CDrawToolBar, CToolBar)
    CDrawToolBar::CDrawToolBar()
    {
        m_nColumns = 2;
    m_cxLeftBorder = 5;
    m_cyTopBorder = 5;
    m_cxRightBorder = 5;
    m_cyBottomBorder = 5;
    }CDrawToolBar::~CDrawToolBar()
    {
    }
    BEGIN_MESSAGE_MAP(CDrawToolBar, CToolBar)
    END_MESSAGE_MAP()// CDrawToolBar 消息处理程序
    void CDrawToolBar::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 |= TBBS_WRAPPED;
    else
    nStyle &= ~TBBS_WRAPPED;
    SetButtonStyle(i, nStyle);
    }

    Invalidate();
    GetParentFrame()->RecalcLayout();
    }