Click here to Skip to main content
Click here to Skip to main content

Pinnable ControlBar

, 4 Dec 2003
Rate this:
Please Sign up or sign in to vote.
This article is based on Cristi Posea's CSizeControlBar

Introduction

This article is based on the article CSizingControlBar - a resizable control bar by Cristi Posea. It implements a control bar that can be pinned.

Using the code

  1. Include the following files in your project:
    scbarcf.cpp
    scbarcf.h
    sizecbar.h
    sizecbar.cpp
    scbarg.h
    scbarg.cpp
    
    PinDockBar.cpp
    PinDockBar.h
    AutoHideBar.cpp
    AutoHideBar.h
    DrawFrame.cpp
    DrawFrame.h
    
  2. Add these lines to your stdafx.h (if the files are in a different directory, include the path - see the stdafx.h file in the samples):
    #define _SCB_REPLACE_MINIFRAME
    #include "sizecbar.h"
    #include "scbarg.h"
    #include "scbarcf.h"
    
    #include "PinDockBar.h"
    #include "DrawFrame.h"
    #include "AutoHideBar.h
    
  3. Derive classes from CPinDockBar (you have an example in mybar.* files).
  4. In mainfrm.h, include your class' header, i.e.
    #include "mybar.h"
    

    Then add member variables to CMainFrame, i.e.

        CMyBar m_MyBar;
        CMyBar2 m_MyBar2;
        CMyBar2 m_MyBar2_1;
    
  5. In mainfrm.h, Add following macro in the CMainFrame class definition
    class CMainFrame : public CFrameWnd
    {
    //....    
        DECLARE_PINDOCK()
    };
    
  6. In mainfrm.cpp, add following macro:
    IMPLEMENT_PINDOCK(CMainFrame)
    
  7. In mainfrm.cpp, add following macro in the message map of the class:
    BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
    //...
        ON_PINDOCK_MESSAGES()
    END_MESSAGE_MAP()
    
  8. Create the bar in CMainFrame::OnCreate(). Then set bar styles, enable it to dock... like any control bar. Using EnablePinDocking(..) instead of EnableDocking, i.e.
        EnablePinDocking(CBRS_ALIGN_ANY);
        //EnableDocking(CBRS_ALIGN_ANY);
    
  9. Set your imagelist for the AutoHideBar array m_AutoHideBar[0..3]
        m_ImgList.Create(IDB_TAB, 16, 1, RGB(255,0,255));
        for(int i = 0;i < 4; i ++)
            m_AutoHideBar[i].SetImageList(&m_ImgList);
    
  10. CPinDockBar is an abstract class, you need to implement two functions for your class:
    public:
        void AddToDrawBar(CAutoHideBar * pDrawBar);
        void RemoveFromDrawBar(CAutoHideBar * pDrawBar);
    

AddToDrawBar is called when a control sizing bar needs to move its child control(s) to side pane. RemoveFromDrawBar is called when a control sizing bar needs to take back its child control(s) from side pane.

The functions could be like this:

void CMyBar2::AddToDrawBar(CAutoHideBar * pDrawBar)
{
    CRect rt;
    GetClientRect(&rt);
    CString szStr;
    GetWindowText(szStr);
    pDrawBar->AddButton(szStr, DRAWBTNSTYLE_BTN, &m_List, 
        this, &rt, this, 0);
    
};

void CMyBar2::RemoveFromDrawBar(CAutoHideBar * pDrawBar)
{
    CRect rect;
    pDrawBar->RemoveButton(&m_List);
    pDrawBar->Shrink();
    pDrawBar->CalcLayout();
    pDrawBar->Invalidate();
    GetParentFrame()->ShowControlBar(this, TRUE, FALSE);

    GetClientRect(&rect);        
    m_List.MoveWindow(9,9, rect.Width() - 18, rect.Height() - 9 - 9);

};

Note

LoadBarState() and SaveState() not implemented

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

ziran lin
Software Developer
United States United States
No Biography provided

Comments and Discussions

 
GeneralRe: setting m_pFloatingFrameClass protected data member PinmemberIonut Codrut12-Sep-06 21:05 
GeneralRe: setting m_pFloatingFrameClass protected data member Pinmemberziran lin13-Sep-06 10:22 
GeneralRe: setting m_pFloatingFrameClass protected data member PinmemberIonut Codrut13-Sep-06 20:16 
GeneralRe: setting m_pFloatingFrameClass protected data member Pinmemberziran lin14-Sep-06 15:28 
GeneralRe: setting m_pFloatingFrameClass protected data member [modified] PinmemberIonut Codrut15-Sep-06 22:19 
GeneralRe: setting m_pFloatingFrameClass protected data member Pinmemberziran lin18-Sep-06 15:54 
Questionhi,Ziran. Have you try to add an item to the list control? Pinmembervt123456789022-Aug-06 15:11 
AnswerRe: hi,Ziran. Have you try to add an item to the list control? Pinmembervt123456789022-Aug-06 18:13 
The list I said is in the tabctrl.
I have found the problem. I set the style of the list to a value that could display items then the items appeared. but there still some problem with the list. such as it can not be displayed properly.

GeneralResize = Flash is serious [modified] Pinmembersupau31-Jul-06 22:14 
GeneralRe: Resize = Flash is serious [modified] Pinmemberziran lin1-Aug-06 15:23 
GeneralResize during startup Pinmemberisonic27-Jul-06 2:50 
GeneralRe: Resize during startup Pinmemberziran lin1-Aug-06 15:44 
QuestionHow can I put a formview in the tabctrl Pinmembervt123456789016-Jun-06 13:23 
AnswerRe: How can I put a formview in the tabctrl PinmemberZiran_lin16-Jun-06 14:21 
GeneralRe: How can I put a formview in the tabctrl Pinmembervt123456789016-Jun-06 19:45 
Generalload / save state PinmemberLoganKale12-Jun-06 4:54 
Generalmissplasing of the control bar PinmemberLoganKale7-Jun-06 4:38 
GeneralRe: missplasing of the control bar [modified] PinmemberZiran_lin7-Jun-06 14:57 
GeneralRe: missplasing of the control bar PinmemberLoganKale12-Jun-06 4:55 
GeneralDisplay a modeless dialog Pinmemberalwittta4-May-06 21:00 
GeneralRe: Display a modeless dialog PinmemberZiran_lin22-May-06 11:24 
QuestionHow to set the initial bar state as hide? Pinmemberhumorstar16-Jul-05 14:49 
AnswerRe: How to set the initial bar state as hide? PinmemberVinicius Pontes6-Feb-06 2:14 
AnswerRe: How to set the initial bar state as hide? PinmemberJames Poag25-Jan-07 6:11 
GeneralAbout License... PinmemberJoseph Mendez29-Dec-04 23:18 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web04 | 2.8.140814.1 | Last Updated 5 Dec 2003
Article Copyright 2003 by ziran lin
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid