当前位置: 首页>>代码示例>>C++>>正文


C++ CComQIPtr::GetDrift方法代码示例

本文整理汇总了C++中CComQIPtr::GetDrift方法的典型用法代码示例。如果您正苦于以下问题:C++ CComQIPtr::GetDrift方法的具体用法?C++ CComQIPtr::GetDrift怎么用?C++ CComQIPtr::GetDrift使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CComQIPtr的用法示例。


在下文中一共展示了CComQIPtr::GetDrift方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: Layout

HRESULT CCUILayoutHorizontal::Layout(IUIFrame* pHostFrame)
{
	DEBUG_ASSERT(pHostFrame) ;
	IF_RETURN(NULL == pHostFrame, E_INVALIDARG) ;

	CSize szContainer(0, 0) ;
	pHostFrame->GetSize(&szContainer) ;
	CRect rcPadding(0, 0, 0, 0) ;
	pHostFrame->GetPadding(&rcPadding) ;
	CRect rcExtPadding(0, 0, 0, 0) ;
	CComQIPtr<IUIFrameInternal> pFrameInternal = pHostFrame ;
	if (pFrameInternal)
	{
		pFrameInternal->GetExtPadding(&rcExtPadding) ;
	}

	CRect rcContainer(0, 0, 0, 0) ;
	rcContainer.left    = rcPadding.left + rcExtPadding.left ;
	rcContainer.top     = rcPadding.top + rcExtPadding.top ;
	rcContainer.right   = szContainer.cx - rcPadding.right - rcExtPadding.right ;
	rcContainer.bottom  = szContainer.cy - rcPadding.bottom - rcExtPadding.bottom ;

	INT nCurrentLayout = 0, nUsedSpace = 0 ;
	if (LAYOUT::ORIENTATION_NEAR == this->m_nOrientation)
	{
		nCurrentLayout = rcPadding.left + rcExtPadding.left ;
	}
	else if (LAYOUT::ORIENTATION_FAR == this->m_nOrientation)
	{
		nCurrentLayout = szContainer.cx - rcPadding.right - rcExtPadding.right ;
	}

	LONG lChildrenCount = 0 ;
	pHostFrame->GetChildrenCount(&lChildrenCount) ;
	for (INT i = 0; i < lChildrenCount; ++i)
	{
		CComPtr<IUIElement> pElement ;
		pHostFrame->GetChildByIndex(i, &pElement) ;
		CComQIPtr<IUIFrame> pFrameChild = pElement ;
		CComQIPtr<IUIFrameInternal> pFrameInternal = pElement ;
		IF_CONTINUE(NULL == pFrameChild || NULL == pFrameInternal) ;

		BOOL bHidden = FALSE ;
		pFrameChild->GetHidden(&bHidden) ;
		IF_CONTINUE(bHidden) ;

		BOOL bFloat = FALSE ;
		pFrameChild->GetFloat(&bFloat) ;
		IF_CONTINUE(bFloat) ;

		CRect rcChildMargin(0, 0, 0, 0) ;
		pFrameChild->GetMargin(&rcChildMargin) ;

		BOOL bChildHeightAsParent = FALSE ;
		pFrameChild->GetHeightAsParent(&bChildHeightAsParent) ;
		if (bChildHeightAsParent)
		{
			CSize szEstimateSize(0, 0) ;
			szEstimateSize.cx   = -1 ;
			szEstimateSize.cy   = rcContainer.Height() - rcChildMargin.top - rcChildMargin.bottom ;
			pFrameInternal->SetEstimateSize(szEstimateSize) ;
		}

		BOOL bChildWidthAsParent = FALSE ;
		pFrameChild->GetWidthAsParent(&bChildWidthAsParent) ;
		if (i == this->m_nFillItem -1  || -1 * lChildrenCount + i == this->m_nFillItem)
		{
			INT nFillSize = this->CalcFillSize(pHostFrame, rcContainer, nUsedSpace, i) ;
			CSize szEstimateSize(0, 0) ;
			szEstimateSize.cx   = nFillSize - rcChildMargin.left - rcChildMargin.right ;
			szEstimateSize.cy   = -1 ;
			pFrameInternal->SetEstimateSize(szEstimateSize) ;
		}
		else if (bChildWidthAsParent)
		{
			pFrameInternal->SetEstimateSize(CSize(0, -1)) ;
		}

		CRect rcTarget(0, 0, 0, 0) ;
		CSize szChildChild(0, 0) ;
		pFrameChild->GetSize(&szChildChild) ;

		nUsedSpace += szChildChild.cx + rcChildMargin.left + rcChildMargin.right ;

		INT nDrift = DRIFT::DRIFT_NEAR ;
		pFrameChild->GetDrift(&nDrift) ;

		if (LAYOUT::ORIENTATION_NEAR == this->m_nOrientation)
		{
			if (DRIFT::DRIFT_NEAR == nDrift)
			{
				rcTarget.top    = rcContainer.top + rcChildMargin.top ;
			}
			else if (DRIFT::DRIFT_FAR == nDrift)
			{
				rcTarget.top	= rcContainer.bottom - rcChildMargin.bottom - szChildChild.cy ;
			}
			else if (DRIFT::DRIFT_MIDDLE == nDrift)
			{
				rcTarget.top	= (rcContainer.Height() - szChildChild.cy)/2 + rcContainer.top ;
//.........这里部分代码省略.........
开发者ID:jellychen,项目名称:windows_directui,代码行数:101,代码来源:CCUILayoutHorizontal.cpp


注:本文中的CComQIPtr::GetDrift方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。