本文整理汇总了C++中CXTPToolBar::CalcDockingLayout方法的典型用法代码示例。如果您正苦于以下问题:C++ CXTPToolBar::CalcDockingLayout方法的具体用法?C++ CXTPToolBar::CalcDockingLayout怎么用?C++ CXTPToolBar::CalcDockingLayout使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CXTPToolBar
的用法示例。
在下文中一共展示了CXTPToolBar::CalcDockingLayout方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: _AdjustRow
int CXTPDockBar::_AdjustRow(CToolBarArray& arrRow, CPoint pt, int nLength, BOOL bHorz, AFX_SIZEPARENTPARAMS* lpLayout, int& nRemove)
{
CDockInfoArray arrInfo;
int nPos;
// Step 1. Getting maximum available size;
for (nPos = 0; nPos < arrRow.GetSize(); nPos++)
{
CXTPToolBar* pBar = arrRow[nPos];
CSize sizeBar = pBar->CalcDockingLayout(nLength, _GetMode(bHorz, pBar));
CPoint p = bHorz ? CPoint(pBar->m_pDockContext->m_rectMRUDockPos.left, pt.y) :
CPoint(pt.x, pBar->m_pDockContext->m_rectMRUDockPos.top);
DOCK_INFO dockInfo(pBar, CRect(p, sizeBar), nPos);
arrInfo.Add(dockInfo);
}
ASSERT(arrInfo.GetSize() == arrRow.GetSize());
if (!bHorz) arrInfo.InvertRects();
arrInfo.Sort();
// Step 2. if Total length is more than available, fill empty area.
int nIndex = -1;
int nLen = 0;
BOOL bMove = TRUE;
for (nPos = 0; nPos < arrInfo.GetSize(); nPos++)
{
CRect& rect = arrInfo[nPos].rcBar;
bMove = (rect.left < nLen && (nIndex < arrInfo[nPos].nIndex || bMove));
if (bMove) rect.OffsetRect(nLen - rect.left, 0);
nLen = rect.right;
nIndex = arrInfo[nPos].nIndex;
}
nLen = nLength;
nIndex = -1;
bMove = TRUE;
for (nPos = (int)arrInfo.GetSize() - 1; nPos >= 0; nPos--)
{
CRect& rect = arrInfo[nPos].rcBar;
bMove = (rect.right - nLen > 0 && (nIndex < arrInfo[nPos].nIndex || bMove));
if (bMove) rect.OffsetRect(nLen - rect.right, 0);
nLen = rect.left;
nIndex = arrInfo[nPos].nIndex;
}
nLen = 0;
for (nPos = 0; nPos < arrInfo.GetSize(); nPos++)
{
CRect& rect = arrInfo[nPos].rcBar;
if (rect.left < nLen)
rect.OffsetRect(nLen - rect.left, 0);
nLen = rect.left + rect.Width();
}
// Step 3. if Total length is more than available, make it expandable.
if (nLen > nLength)
{
int nSum = 0;
for (nPos = 0; nPos < arrInfo.GetSize(); nPos++)
{
CXTPToolBar* pBar = arrInfo[nPos].pBar;
if (!(_GetMode(bHorz, pBar) & LM_HIDEWRAP))
arrInfo[nPos].nMinWidth = nLength;
else
{
CSize sz = pBar->CalcDockingLayout(1, _GetMode(bHorz, pBar));
arrInfo[nPos].nMinWidth = bHorz ? sz.cx : sz.cy;
}
arrInfo[nPos].nTotlaMinWidth = nSum;
nSum += arrInfo[nPos].nMinWidth;
}
nLen = nLength;
for (nPos = (int)arrInfo.GetSize() - 1; nPos >= 0; nPos--)
{
CRect& rect = arrInfo[nPos].rcBar;
int nLeft = bHorz ? arrInfo[nPos].rcMRUPos.left : arrInfo[nPos].rcMRUPos.top;
if (nLeft > rect.left) nLeft = rect.left;
if (nLeft < nLen - rect.Width()) nLeft = nLen - rect.Width();
if (nLeft < arrInfo[nPos].nTotlaMinWidth) nLeft = arrInfo[nPos].nTotlaMinWidth;
if (nLen - nLeft < arrInfo[nPos].nMinWidth) nLeft = nLen - arrInfo[nPos].nMinWidth;
if ((nLen - nLeft < arrInfo[nPos].nMinWidth || nLeft < arrInfo[nPos].nTotlaMinWidth)
&& arrInfo.GetSize() != 1)
{
nRemove = arrInfo[arrInfo.GetSize() - 1].nIndex;
//.........这里部分代码省略.........