툴바의 컬럼수 정하기

이 내용은 '따라해 보세요 Visual C++ 6'에서 참고한 내용입니다.

 

 

 위의 그림에서 보듯 왼쪽의 툴바는 세로로 2줄로 구성되어 있다.

 툴바를 이렇게 구성하기 위해서 다음과 같이 작업한다.

 

1. 새로운 클래스로 CToolBar 클래스에서 파생된 CMyToolBar 클래스를 만든다.

 클래스 위저드에서는 Base Class로 CToolBar를 지원하지 않기 때문에 지원되는 CToolBarCtrl을 Base Class 로 만든 다음, CToolBarCtrl을 모두 CToolBar로 고친다.

 

2. CMyToolBar의 멤버변수로 다음과 같이 SetColumns() 함수를 추가한다.

void CMyToolBar::SetColumns(UINT nColumn)
{
        int nCount = GetToolBarCtrl().GetButtonCount();

        for(int i=0; i<nCount; i++) {
                UINT nStyle = TBBS_CHECKGROUP;
                BOOL bWrap = (((i+1) % nColumn) == 0);

                if(bWrap)
                        nStyle |= TBBS_WRAPPED;
                else
                        nStyle &= ~ TBBS_WRAPPED;
                
                SetButtonStyle(i, nStyle);
        }
        Invalidate();
        GetParentFrame()->RecalcLayout();
}

 

3. MainFrm.h 파일에 새로 만든 툴바 클래스를 사용하기 위해 헤더파일을 인클루드 한다.

 

4. 새로 만든 CMyToolBar의 헤더파일을 다음과 같이 MainFrm.h 파일에 추가한다.

protected:  // control bar embedded members
        CStatusBar  m_wndStatusBar;
        CToolBar    m_wndToolBar;
        CMyToolBar  m_wndMyToolBar;

 

5. MainFrm.cpp 파일에 다음 굵은 글씨부분을 추가한다.

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
        if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
                return -1;

        if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
                | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
                !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
        {
                TRACE0("Failed to create toolbar\n");
                return -1;      // fail to create
        }

        if (!m_wndStatusBar.Create(this) ||
                !m_wndStatusBar.SetIndicators(indicators,
                  sizeof(indicators)/sizeof(UINT)))
        {
                TRACE0("Failed to create status bar\n");
                return -1;      // fail to create
        }
        
        if(!m_wndMyToolBar.Create(this, WS_CHILD|WS_VISIBLE|CBRS_SIZE_FIXED|
                CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY , IDR_TOOLBAR1)
                || !m_wndMyToolBar.LoadToolBar(IDR_TOOLBAR1))
        {
                TRACE0("Failed to create toolbar\n");
                return -1;
        }

        m_wndMyToolBar.SetColumns(2);


        // TODO: Delete these three lines if you don't want the toolbar to
        //  be dockable
        m_wndMyToolBar.EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);
        m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
        EnableDocking(CBRS_ALIGN_ANY);  
        // 기존의 툴바를 없앤다면 이 부분도 다음처럼 고쳐야 함
        // EnableDocking(CBRS_ALIGN_LEFT | CBRS_ALIGN_RIGHT);  

        DockControlBar(&m_wndToolBar);
        DockControlBar(&m_wndMyToolBar);

        return 0;
}

 

- the end of this article -