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; }
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; }
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); } }
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()); }