From: rshoba on
Hi,

I have created a main toolbar, and two more toolbars. All three are
aligned at TOP, one below the other. I use DockControlBar to dock
them.

m_ToolBar1.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
m_ToolBar2.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
m_ToolBar3.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_ToolBar1);
DockControlBar(&m_ToolBar2);
DockControlBar(&m_ToolBar3);

It was all fine till this point. The problem comes next.

Now, I need to have them all in a single line. It should look
something like this.

----------------------------------------------------------------------------------------------------------------------------------------------------
|
m_ToolBar1|
|m_ToolBar2|m_ToolBar3|
-----------------------------------------------------------------------------------------------------------------------------------------------------

I tried a lot to bring the toolbars in these positions, but in vain. I
googled a lot and found DockControlBarLeftOf ()sample present in MSDN.
But that too is not serving my purpose, as I need to dock the second
and third toolbars in the top right corner of the First toolbar and
most importantly, the second and third toolbars should be a dockable
ones. So, just cannot use DockControlBarLeftOf().

I would extremly appreciate it, if someone could shed some light on
it, as I tried many many possiblities and found nothing working.
From: Ajay Kalra on
On May 21, 11:35 pm, rsh...(a)gmail.com wrote:
> Hi,
>
> I have created a main toolbar, and two more toolbars. All three are
> aligned at TOP, one below the other. I use DockControlBar to dock
> them.
>
> m_ToolBar1.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
> m_ToolBar2.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
> m_ToolBar3.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
>
> EnableDocking(CBRS_ALIGN_ANY);
>
> DockControlBar(&m_ToolBar1);
> DockControlBar(&m_ToolBar2);
> DockControlBar(&m_ToolBar3);
>
> It was all fine till this point. The problem comes next.
>
> Now, I need to have them all in a single line. It should look
> something like this.
>
> ----------------------------------------------------------------------------------------------------------------------------------------------------
> |
> m_ToolBar1|
> |m_ToolBar2|m_ToolBar3|
> -----------------------------------------------------------------------------------------------------------------------------------------------------
>
> I tried a lot to bring the toolbars in these positions, but in vain. I
> googled a lot and found DockControlBarLeftOf ()sample present in MSDN.
> But that too is not serving my purpose, as I need to dock the second
> and third toolbars in the top right corner of the First toolbar and

Picture that you drew above does not match with what you have written.
DockControlBarlefOf should work for m_toolBar2. What you are writing
though is that you want to right justify two toolbars. If yes, MFC
doesnt have anything like this for docking.

--
Ajay

From: AliR (VC++ MVP) on
It worked just fine when I tried it like this:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CMDIFrameWnd::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_wndToolBar2.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE |
CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar2.LoadToolBar(IDR_MAINFRAME2))
{
TRACE0("Failed to create toolbar\n");
return -2; // fail to create
}

if (!m_wndToolBar3.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE |
CBRS_TOP
| CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar3.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar\n");
return -2; // 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
}

m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar2.EnableDocking(CBRS_ALIGN_ANY);
m_wndToolBar3.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
DockControlBar(&m_wndToolBar2);
DockControlBarLeftOf(&m_wndToolBar3,&m_wndToolBar2);
return 0;
}

void CMainFrame::DockControlBarLeftOf(CToolBar* Bar, CToolBar* LeftOf)
{
CRect rect;
DWORD dw;
UINT n;

// get MFC to adjust the dimensions of all docked ToolBars
// so that GetWindowRect will be accurate
RecalcLayout(TRUE);

LeftOf->GetWindowRect(&rect);
rect.OffsetRect(1,0);
dw=LeftOf->GetBarStyle();
n = 0;
n = (dw&CBRS_ALIGN_TOP) ? AFX_IDW_DOCKBAR_TOP : n;
n = (dw&CBRS_ALIGN_BOTTOM && n==0) ? AFX_IDW_DOCKBAR_BOTTOM : n;
n = (dw&CBRS_ALIGN_LEFT && n==0) ? AFX_IDW_DOCKBAR_LEFT : n;
n = (dw&CBRS_ALIGN_RIGHT && n==0) ? AFX_IDW_DOCKBAR_RIGHT : n;

// When we take the default parameters on rect, DockControlBar will dock
// each Toolbar on a seperate line. By calculating a rectangle, we
// are simulating a Toolbar being dragged to that location and docked.
DockControlBar(Bar,n,&rect);
}


Here is where got the DockControlBarLeftOf
http://www.codeproject.com/KB/toolbars/toolbar_docking.aspx

AliR.




<rshoba(a)gmail.com> wrote in message
news:3939094e-87b9-4133-890d-78546dd45628(a)y22g2000prd.googlegroups.com...
> Hi,
>
> I have created a main toolbar, and two more toolbars. All three are
> aligned at TOP, one below the other. I use DockControlBar to dock
> them.
>
> m_ToolBar1.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
> m_ToolBar2.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
> m_ToolBar3.EnableDocking(CBRS_ALIGN_TOP|CBRS_ALIGN_BOTTOM);
>
> EnableDocking(CBRS_ALIGN_ANY);
>
> DockControlBar(&m_ToolBar1);
> DockControlBar(&m_ToolBar2);
> DockControlBar(&m_ToolBar3);
>
> It was all fine till this point. The problem comes next.
>
> Now, I need to have them all in a single line. It should look
> something like this.
>
> ----------------------------------------------------------------------------------------------------------------------------------------------------
> |
> m_ToolBar1|
> |m_ToolBar2|m_ToolBar3|
> -----------------------------------------------------------------------------------------------------------------------------------------------------
>
> I tried a lot to bring the toolbars in these positions, but in vain. I
> googled a lot and found DockControlBarLeftOf ()sample present in MSDN.
> But that too is not serving my purpose, as I need to dock the second
> and third toolbars in the top right corner of the First toolbar and
> most importantly, the second and third toolbars should be a dockable
> ones. So, just cannot use DockControlBarLeftOf().
>
> I would extremly appreciate it, if someone could shed some light on
> it, as I tried many many possiblities and found nothing working.