Шаг 90 - Самый простой способ анимированного изображения на диалоге

Самый простой, потому что не требуется никаких специальных элементов управления. Используем обычный CStatic. Создаем диалог, на него элемент управления CStatic, а в ресурсы набор для анимации с идентификаторами по порядку.

90_1.gif (29578 b)

Ну, а теперь описываем переменную таймера и номера картинки.

class CTestAnimDlg : public CDialog
{
// Construction
public:
	CTestAnimDlg(CWnd* pParent = NULL);	// standard constructor
	UINT m_nTimer;
	int x;
	........
};

Инициализируем номер первой картинки:

CTestAnimDlg::CTestAnimDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CTestAnimDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CTestAnimDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require 
	// a subsequent DestroyIcon in Win32
	x=IDB_BITMAP1;
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

Описываем идентификатор таймера:

#include "TestAnimDlg.h"

#define TIMER_ID 100

#ifdef _DEBUG

Заводим таймер:

BOOL CTestAnimDlg::OnInitDialog()
{
	.......
	// TODO: Add extra initialization here
	m_nTimer = SetTimer(TIMER_ID, 200, 0);

	return TRUE;  // return TRUE  unless you set the focus to a control
}

И по событию таймера меняем картинку:

void CTestAnimDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if (x<(IDB_BITMAP14)) x++;
	else x=IDB_BITMAP1;
	m_Anim.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(x)));
	CDialog::OnTimer(nIDEvent);
}

Вот и все, запускаем и смотрим.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 12.07.2002