16,471
社区成员
发帖
与我相关
我的任务
分享
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中
if (!m_wndReBar.Create(this) ||
!m_wndReBar.AddBar(&m_wndMenuBar) ||
!m_wndReBar.AddBar(&m_wndToolBar, NULL, NULL,
RBBS_GRIPPERALWAYS | RBBS_FIXEDBMP | RBBS_BREAK) ||
!m_wndReBar.AddBar(&m_wndAnimate, NULL, NULL, RBBS_FIXEDSIZE | RBBS_FIXEDBMP) ||
!m_wndReBar.AddBar(&m_wndAddress, strAddressLabel, NULL,
RBBS_GRIPPERALWAYS | RBBS_FIXEDBMP | RBBS_BREAK) ||
!m_wndReBar.AddBar(&m_wndLinksBar, strLinksLabel, NULL,
RBBS_GRIPPERALWAYS | RBBS_FIXEDBMP | RBBS_BREAK))
{
TRACE0("Failed to create rebar\n");
return -1; // fail to create
}
void CBCGToolBar::AdjustLayout ()
{
if (GetSafeHwnd () == NULL)
{
return;
}
CReBar* pBar = DYNAMIC_DOWNCAST (CReBar, GetParent());
if (pBar != NULL)
{
CReBarCtrl& wndReBar = pBar->GetReBarCtrl ();
UINT uiReBarsCount = wndReBar.GetBandCount ();
REBARBANDINFO bandInfo;
bandInfo.cbSize = sizeof (bandInfo);
bandInfo.fMask = (RBBIM_CHILDSIZE | RBBIM_CHILD);
UINT uiBand;
for ( uiBand = 0; uiBand < uiReBarsCount; uiBand ++)
{
wndReBar.GetBandInfo (uiBand, &bandInfo);
if (bandInfo.hwndChild == GetSafeHwnd ())
{
break; //循环中找不到this对象的m_hWnd,无法跳出循环
}
}
if (uiBand >= uiReBarsCount)
{
ASSERT (FALSE); //这儿出错
}
else
{
CSize sizeMin = CalcSize (FALSE);
CRect rect; rect.SetRectEmpty();
CalcInsideRect (rect, TRUE);
sizeMin.cy -= rect.Height();
sizeMin.cx -= rect.Width();
CSize size = CControlBar::CalcFixedLayout (FALSE, TRUE);
sizeMin.cx = max(sizeMin.cx, size.cx);
sizeMin.cy = max(sizeMin.cy, size.cy);
bandInfo.cxMinChild = sizeMin.cx;
bandInfo.cyMinChild = sizeMin.cy;
wndReBar.SetBandInfo (uiBand, &bandInfo);
wndReBar.MinimizeBand (uiBand);
}
}
else
{
CFrameWnd* pParent = GetParentFrame ();
if (pParent != NULL && pParent->GetSafeHwnd () != NULL)
{
pParent->RecalcLayout ();
}
}
AdjustLocations ();
UpdateWindow ();
Invalidate ();
}