Beispiel #1
0
BOOL CBCGPReBar::_AddBar(CWnd* pBar, REBARBANDINFO* pRBBI)
{
	ASSERT_VALID(this);
	ASSERT(::IsWindow(m_hWnd));
	ASSERT(pBar != NULL);
	ASSERT(::IsWindow(pBar->m_hWnd));

	pRBBI->cbSize = globalData.GetRebarBandInfoSize ();
	pRBBI->fMask |= RBBIM_CHILD | RBBIM_CHILDSIZE;
	pRBBI->hwndChild = pBar->m_hWnd;

	CSize size;
	CBCGPControlBar* pTemp = DYNAMIC_DOWNCAST(CBCGPControlBar, pBar);
	if (pTemp != NULL)
	{
		size = pTemp->CalcFixedLayout(FALSE, m_dwStyle & CBRS_ORIENT_HORZ);
		pTemp->SetBCGStyle(pTemp->GetBCGStyle () & ~(CBRS_BCGP_AUTOHIDE | CBRS_BCGP_FLOAT));
		pTemp->m_bIsRebarPane = TRUE;
	}
	else
	{
		CRect rect;
		pBar->GetWindowRect(&rect);
		size = rect.Size();
	}
	//WINBUG: COMCTL32.DLL is off by 4 pixels in its sizing logic.  Whatever
	//  is specified as the minimum size, the system rebar will allow that band
	//  to be 4 actual pixels smaller!  That's why we add 4 to the size here.

	pRBBI->cxMinChild = size.cx;
	pRBBI->cyMinChild = size.cy;
	BOOL bResult = (BOOL)DefWindowProc(RB_INSERTBAND, (WPARAM)-1, (LPARAM)pRBBI);

	CFrameWnd* pFrameWnd = BCGPGetParentFrame(this);
	if (pFrameWnd != NULL)
		pFrameWnd->RecalcLayout();

	return bResult;
}