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; } } }
void LoadSmiley(void) { if (m_img != NULL) return; m_img = m_sml->CreateCachedImage(); if (m_img && m_img->IsAnimated() && opt.AnimateDlg) { m_nFramePosition = 0; m_img->SelectFrame(m_nFramePosition); long frtm = m_img->GetFrameDelay(); m_counter = frtm / 10 + ((frtm % 10) >= 5); regAniSmileys.insert(this); if (timerId == 0) { timerId = 0xffffffff; CallFunctionAsync(sttMainThreadCallback, NULL); } } else m_nFramePosition = m_sml->GetStaticFrame(); }