本文整理汇总了C++中SWindow::OnRelayout方法的典型用法代码示例。如果您正苦于以下问题:C++ SWindow::OnRelayout方法的具体用法?C++ SWindow::OnRelayout怎么用?C++ SWindow::OnRelayout使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SWindow
的用法示例。
在下文中一共展示了SWindow::OnRelayout方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LayoutChildren
//.........这里部分代码省略.........
CSize szCalc = pChild->GetDesiredSize(szChild.cx,szChild.cy);
if(szChild.cx == SIZE_WRAP_CONTENT)
{
szChild.cx = szCalc.cx;
szChild.cx += pLinearLayoutParam->extend_left.toPixelSize(nScale) + pLinearLayoutParam->extend_right.toPixelSize(nScale);
}
if(szChild.cy == SIZE_WRAP_CONTENT)
{
szChild.cy = szCalc.cy;
szChild.cy += pLinearLayoutParam->extend_top.toPixelSize(nScale) + pLinearLayoutParam->extend_bottom.toPixelSize(nScale);
}
}
pChilds[iChild] = pChild;
pSize [iChild] = szChild;
offset += m_orientation == Vert ? szChild.cy:szChild.cx;
iChild++;
pChild=pParent->GetNextLayoutChild(pChild);
}
nChilds = iChild;
}
int size = m_orientation == Vert? rcParent.Height():rcParent.Width();
if(fWeight > 0.0f && size > offset)
{//assign size by weight
int nRemain = size - offset;
for(int iChild = 0;iChild < nChilds;iChild ++)
{
SWindow *pChild = pChilds[iChild];
SLinearLayoutParam *pLinearLayoutParam = pChild->GetLayoutParamT<SLinearLayoutParam>();
if(pLinearLayoutParam->weight > 0.0f)
{
LONG & szChild = m_orientation == Vert? pSize[iChild].cy:pSize[iChild].cx;
szChild += (int)(nRemain*pLinearLayoutParam->weight/fWeight);
}
}
}
{//assign position
offset = 0;
for(int iChild = 0;iChild < nChilds;iChild ++)
{
SWindow *pChild = pChilds[iChild];
SLinearLayoutParam *pLinearLayoutParam = pChild->GetLayoutParamT<SLinearLayoutParam>();
int nScale = pChild->GetScale();
Gravity gravity = pLinearLayoutParam->gravity == G_Undefined? m_gravity:pLinearLayoutParam->gravity;
if(gravity == G_Undefined) gravity = G_Left;
if(m_orientation == Vert)
{
CRect rcChild(CPoint(0,offset),pSize[iChild]);
rcChild.OffsetRect(rcParent.TopLeft());
if(gravity == G_Center)
rcChild.OffsetRect((rcParent.Width()-rcChild.Width())/2,0);
else if(gravity == G_Right)
rcChild.OffsetRect(rcParent.Width()-rcChild.Width(),0);
CRect rcChild2 = rcChild;
rcChild2.DeflateRect(pLinearLayoutParam->extend_left.toPixelSize(nScale),
pLinearLayoutParam->extend_top.toPixelSize(nScale),
pLinearLayoutParam->extend_right.toPixelSize(nScale),
pLinearLayoutParam->extend_bottom.toPixelSize(nScale)
);
pChild->OnRelayout(rcChild2);
offset += rcChild.Height();
}else
{
CRect rcChild(CPoint(offset,0),pSize[iChild]);
rcChild.OffsetRect(rcParent.TopLeft());
if(gravity == G_Center)
rcChild.OffsetRect(0,(rcParent.Height()-rcChild.Height())/2);
else if(gravity == G_Right)
rcChild.OffsetRect(0,rcParent.Height()-rcChild.Height());
CRect rcChild2 = rcChild;
rcChild2.DeflateRect(pLinearLayoutParam->extend_left.toPixelSize(nScale),
pLinearLayoutParam->extend_top.toPixelSize(nScale),
pLinearLayoutParam->extend_right.toPixelSize(nScale),
pLinearLayoutParam->extend_bottom.toPixelSize(nScale));
pChild->OnRelayout(rcChild2);
offset += rcChild.Width();
}
}
}
delete []pChilds;
delete []pSize;
}