Ejemplo n.º 1
0
HRESULT CMatrixBox::QuickPaint(CRect rcClip0)
{
	//拖拽时直接向窗口绘制缓存的dc,提高效率
	CRect rcParent(0,0,0,0);
	if(m_pParentFrame)
	{
		rcParent = m_pParentFrame->GetPaintRect();
	}
	CRect rcClip;
	CRect rcTmp;
	if(IntersectRect(&rcTmp,&rcParent,&m_rcPaint) == 0)
	{
		return E_FAIL;
	}
	if(IntersectRect(&rcClip,&rcTmp,&rcClip0) == 0)
	{
		return E_FAIL;
	}

	CRect rcWin;
	::GetWindowRect(GetHwnd(),&rcWin);

	HDC hdcMem = ::CreateCompatibleDC(m_hMemDC);
	HBITMAP hbmp = ::CreateCompatibleBitmap(m_hMemDC,rcWin.Width(),rcWin.Height());
	HBITMAP hOldBmp = (HBITMAP)::SelectObject(hdcMem,hbmp);

	::BitBlt(hdcMem,rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),m_hMemDC,rcClip.left,rcClip.top,SRCCOPY);

	int nCount = GetFrameCount();
	
	for(int i= 0;i<nCount;i++)
	{
		CMatrixItem* pItem = (CMatrixItem*)GetFrameByIndex(i);
		if(pItem)
		{
			CRect rcItem = pItem->GetPaintRect();
			if ( IntersectRect( &rcTmp,&rcItem,&rcClip ) != 0 )
			{
				pItem->QuickPaint(hdcMem);
			}	
		}
	}

	HDC hdcWin = ::GetDC(GetHwnd());
	::BitBlt(hdcWin,rcClip.left,rcClip.top,rcClip.Width(),rcClip.Height(),hdcMem,rcClip.left,rcClip.top,SRCCOPY);
	ReleaseDC(GetHwnd(),hdcWin);

	::SelectObject(hdcMem,hOldBmp);
	::DeleteObject(hbmp);
	::DeleteDC(hdcMem);

	return S_OK;
}
Ejemplo n.º 2
0
HRESULT CMatrixBox::SaveChildDC(BOOL bSave)
{
	int nCount = GetFrameCount();
	for(int i= 0;i<nCount;i++)
	{
		CMatrixItem* pItem = (CMatrixItem*)GetFrameByIndex(i);
		if(pItem)
		{
			pItem->SaveDC(bSave);
		}
	}
	return S_OK;
}
Ejemplo n.º 3
0
void cgImageSequence::DoUpdateSelf( float fDeltaTime )
{
	if (m_kFrameList.empty())
		return ;

	cgImageFramePtr spCurFrame = GetFrameByIndex(m_uCurFrameIndex);
	if (!spCurFrame)
		return;

	m_fSequenceTime += fDeltaTime;
	if (m_fSequenceTime >= spCurFrame->GetDuration())
	{
		m_fSequenceTime -= spCurFrame->GetDuration();
		SetCurFrameIndex(m_uCurFrameIndex+1);
	}
}
Ejemplo n.º 4
0
void cgImageSequence::SetCurFrameIndex( unsigned uIndex )
{
	if (m_kFrameList.empty())
		return ;

	m_uCurFrameIndex = uIndex;

	// 循环播放
	if (m_uCurFrameIndex >= m_kFrameList.size())
		m_uCurFrameIndex = 0;

	cgImageFramePtr spFrame = GetFrameByIndex(m_uCurFrameIndex);
	m_spCurImage->SetImage( spFrame->GetImage());
	m_spCurImage->SetSize(spFrame->GetImage()->GetWidth(), spFrame->GetImage()->GetHeight());
	m_spCurImage->SetLocalPosition(spFrame->GetFrameOffsetX(), spFrame->GetFrameOffsetY());

	SetSize(m_spCurImage->GetSize());
}