CDialog using animated control

CAnimateDlg (located in AnimateDlg.h/cpp) is a simple class derived from CDialog in order to implement user designed animated control. The user of the class has to call SetAnimationProperties() method and to pass to it the ID of the static control that will use as an animation control, number of frames in the "movie", array of bitmap IDs in the application resource and the time-slice between frame (to set the animation speed).

Header File

#if !defined(AFX_ANIMATEDLG_H__64C0DD41_7BA0_11D1_8DC6_0000E8125FE5__INCLUDED_)
#define AFX_ANIMATEDLG_H__64C0DD41_7BA0_11D1_8DC6_0000E8125FE5__INCLUDED_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// AnimateDlg.h : header file

// CAnimateDlg dialog

class CAnimateDlg : public CDialog
// Construction
	void StopAnimation();
	void StartAnimation();
	void SetAnimationProperties(UINT controlID,  BYTE nFrames, UINT *pImagesArray, UINT timeSliceBetweenFrames);
	CAnimateDlg();   // standard constructor

// Dialog Data
		// NOTE: the ClassWizard will add data members here

// Overrides
	// ClassWizard generated virtual function overrides
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation

	// Generated message map functions
	afx_msg void OnTimer(UINT nIDEvent);
	CBitmap m_CurrentBmp;
	BYTE m_CurrentFrame;
	UINT m_TimeInterval;
	UINT* m_pFramesArray;
	BYTE m_nFrames;
	UINT m_TargetCtrl;
	BOOL m_bPlayingNow;

// Microsoft Developer Studio will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_ANIMATEDLG_H__64C0DD41_7BA0_11D1_8DC6_0000E8125FE5__INCLUDED_)

CPP File

// AnimateDlg.cpp : implementation file

#include "AnimateDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;

// CAnimateDlg dialog

		// NOTE: the ClassWizard will add member initialization here
	m_TimeInterval = 0;
	m_pFramesArray = NULL;
	m_nFrames = 0;
	m_TargetCtrl = 0;
	m_CurrentFrame = 1;

	if (m_bPlayingNow)

void CAnimateDlg::DoDataExchange(CDataExchange* pDX)
		// NOTE: the ClassWizard will add DDX and DDV calls here


// CAnimateDlg message handlers

void CAnimateDlg::SetAnimationProperties(UINT controlID, BYTE nFrames, UINT * pImagesArray, UINT timeSliceBetweenFrames)
	m_TimeInterval = timeSliceBetweenFrames;
	m_pFramesArray = pImagesArray;
	m_nFrames = nFrames;
	m_TargetCtrl = controlID;	
	m_bPlayingNow = FALSE;

void CAnimateDlg::StartAnimation()
	if (!m_bPlayingNow)
		SetTimer(0, m_TimeInterval, NULL);

void CAnimateDlg::StopAnimation()
	if (m_bPlayingNow)

void CAnimateDlg::OnTimer(UINT nIDEvent) 
	if (m_CurrentFrame > m_nFrames)
		m_CurrentFrame = 1;

	CStatic *pTargetCtrl = (CStatic *) GetDlgItem(m_TargetCtrl);
	ASSERT(pTargetCtrl != NULL);
	m_CurrentBmp.LoadBitmap(m_pFramesArray[m_CurrentFrame - 1]);


  • quite fascinating...

    Posted by Legacy on 03/19/2002 12:00am

    Originally posted by: Narasimham

    It was quite fascinating...Thank you.

  • Want to get some demo

    Posted by Legacy on 06/06/2001 12:00am

    Originally posted by: Karsten Noa

    HEllo can i get a demo project please.

    You can mail it to


  • how to add menu bar to the dialog

    Posted by Legacy on 06/26/1999 12:00am

    Originally posted by: P.R. NARAYAN KUMAR

    this code guru is greate
    it has helped me in many ways
    i want to know from you that how will you add menu bar on the dialog box

    thank you
    narayan kumar.

  • How to Add Status Bar to the CDialog

    Posted by Legacy on 06/15/1999 12:00am

    Originally posted by: Kevin Cao

    anybody out there known how to add a status bar to the CDialog ?
    I really need your help.


  • Bug

    Posted by Legacy on 04/29/1999 12:00am

    Originally posted by: SAEED R

    Detach does not always clear up the object from the bitmaps for some reason....after some iteration graphic disappears due to resource limitation...use deleteobjects() ..that takes care of it........

  • Is it possible to get a demo of this ?

    Posted by Legacy on 04/13/1999 12:00am

    Originally posted by: Gregory Franz

    Is it possible to get a demo of this ? A zipped set of files and demo source code would be helpful. Thanks.

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Enterprises are increasingly looking to platform as a service (PaaS) to lower their costs and speed their time to market for new applications. Developing, deploying, and managing applications in the cloud eliminates the time and expense of managing a physical infrastructure to support them. PaaS offerings must deliver additional long-term benefits, such as a lower total cost of ownership (TCO), rapid scalability, and ease of integration, all while providing robust security and availability. This report …

  • Moving from an on-premises environment to Office 365 does not remove the need to plan for disruptions or reduce the business risk requirements for protecting email services. If anything, some risks increase with a move to the cloud. Read how to ease the transition every business faces if considering or already migrating to cloud email. This white paper discusses: Setting expectations when migrating to Office 365 Understanding the implications of relying solely on Exchange Online security Necessary archiving …

Most Popular Programming Stories

More for Developers

RSS Feeds

Thanks for your registration, follow us on our social networks to keep up-to-date