void ProcessTimerTick(void) { if (m_visible && m_img && --m_counter <= 0) { m_nFramePosition = m_img->SelectNextFrame(m_nFramePosition); long frtm = m_img->GetFrameDelay(); m_counter = frtm / 10 + ((frtm % 10) >= 5); switch (m_animtype) { case animStdOle: if (m_allowAni) SendOnViewChange(); else { m_visible = false; UnloadSmiley(); } m_allowAni = false; break; case animDrctRichEd: DrawOnRichEdit(); break; case animHpp: DrawOnHPP(); break; } } }
// // IViewObject members // HRESULT ISmileyBase::SetAdvise(DWORD aspect, DWORD advf, IAdviseSink* pAdvSink) { if (aspect != DVASPECT_CONTENT) return DV_E_DVASPECT; m_advf = advf; if (m_spAdviseSink) m_spAdviseSink->Release(); m_spAdviseSink = pAdvSink; if (advf & ADVF_PRIMEFIRST) SendOnViewChange(); return S_OK; }
inline HRESULT CGifSmileyCtrl::FireViewChange() { if (m_bInPlaceActive) { // Active if (m_hWndCD != NULL) ::InvalidateRect(m_hWndCD, NULL, m_bTransparent); // Window based else if (m_bWndLess && m_spInPlaceSite != NULL) m_spInPlaceSite->InvalidateRect(NULL, m_bTransparent); // Windowless } else if (!m_hwndParent) { SendOnViewChange(DVASPECT_CONTENT); } else { COLORREF oldColor=m_clrBackColor; BOOL fOldTransparent= m_bTransparent; HWND hwndOld=m_hwndParent; FVCNDATA_NMHDR nmhdr={0}; nmhdr.cbSize=sizeof(FVCNDATA_NMHDR); nmhdr.hwndFrom=hwndOld; nmhdr.code=NM_FIREVIEWCHANGE; nmhdr.clrBackground=oldColor; nmhdr.fTransparent=fOldTransparent; nmhdr.bAction= m_bPaintValid ? (fOldTransparent ? FVCA_INVALIDATE : FVCA_DRAW ) : FVCA_SENDVIEWCHANGE; nmhdr.rcRect=m_rectPos; //SendPrePaintEvent nmhdr.bEvent=FVCN_PREFIRE; //set members m_clrBackColor=nmhdr.clrBackground; m_bTransparent=nmhdr.fTransparent; m_hwndParent=nmhdr.hwndFrom; switch (nmhdr.bAction) { case FVCA_SKIPDRAW: AdvanceFrame(); break; case FVCA_SENDVIEWCHANGE: SendOnViewChange(DVASPECT_CONTENT); ::SendMessage(m_hwndParent, WM_PAINT, NULL, NULL); break; case FVCA_INVALIDATE: ::InvalidateRect(m_hwndParent, &(nmhdr.rcRect), FALSE); break; case FVCA_DRAW: case FVCA_CUSTOMDRAW: ATL_DRAWINFO di; memset(&di,0,sizeof(ATL_DRAWINFO)); di.cbSize=sizeof(ATL_DRAWINFO); di.dwDrawAspect=DVASPECT_CONTENT; if (nmhdr.bAction==FVCA_DRAW) di.hdcDraw=::GetWindowDC(m_hwndParent); else di.hdcDraw=nmhdr.hDC; RECTL rcl={nmhdr.rcRect.left, nmhdr.rcRect.top, nmhdr.rcRect.right, nmhdr.rcRect.bottom}; di.prcBounds=&rcl; OnDrawSmiley(di,nmhdr.bAction==FVCA_DRAW); if (nmhdr.bAction==FVCA_DRAW) ::ReleaseDC(m_hwndParent, di.hdcDraw); break; } //SendPostPaintEvent nmhdr.bEvent=FVCN_POSTFIRE; //restore members m_clrBackColor=oldColor; m_bTransparent=fOldTransparent; m_hwndParent=hwndOld; } return S_OK; }