MFC界面中添加简单动画的思路

时间:2022-12-29 00:24:32

最近在学习MFC,正好今天帮同学修了下照片,突发奇想想在MFC界面里添加一些动画,效果应该不错。

于是,开始动手实验。

先上效果图吧(不知道这上面GIF能不能正常显示):

如果不能正常显示请点下面链接:

http://xiangce.baidu.com/picture/detail/83d7a1b2bdfd5b2d545887e734dbfcbaeb413d9a

下面是CSDN共享链接:(包含了源代码和程序以及效果图)

http://download.csdn.net/detail/k616358281/7037115


MFC界面中添加简单动画的思路


上面结果,界面很简单。

思路也很简单,就是跟做动画一样,一帧一帧地切换就好了,设置好定时时间(这里是专门开辟了一个线程用来操作,以免影响主函数)。

下面是代码:

BOOL CGIF_DLGDlg::OnInitDialog()
里添加下面代码(当然,其中有些是类成员,要自己添加)

	CBitmap bkbmp;
	bkbmp.LoadBitmap(IDB_BKBMP);
	m_bkbrush.CreatePatternBrush(&bkbmp);
	m_bk_num=0;
	m_bmp[0].LoadBitmap(IDB_GIF01);
	m_bmp[1].LoadBitmap(IDB_GIF02);
	m_bmp[2].LoadBitmap(IDB_GIF03);
	m_bmp[3].LoadBitmap(IDB_GIF04);
	m_bmp[4].LoadBitmap(IDB_GIF05);
	m_bmp[5].LoadBitmap(IDB_GIF06);
	m_bmp[6].LoadBitmap(IDB_GIF07);
	m_bmp[7].LoadBitmap(IDB_GIF08);
	m_bmp[8].LoadBitmap(IDB_GIF09);
	m_bmp[9].LoadBitmap(IDB_GIF010);
	m_bmp[10].LoadBitmap(IDB_GIF011);
	m_bmp[11].LoadBitmap(IDB_GIF012);
	m_bmp[12].LoadBitmap(IDB_GIF013);
	m_bmp[13].LoadBitmap(IDB_GIF014);

	HANDLE hthread1;
	hthread1=CreateThread(NULL,0,FunProc,this,0,NULL);

下面是线程一的定义:

DWORD WINAPI FunProc(
  LPVOID lpParameter   // thread data
)
{
	CGIF_DLGDlg* pdlg;
	pdlg=(CGIF_DLGDlg*)lpParameter;
	pdlg->SetTimer(0,80,NULL);
	return 0;
}
添加ontimer相应,并在响应函数添加如下代码: 

void CGIF_DLGDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	if (nIDEvent==0)
		((CStatic*)GetDlgItem(IDC_STATIC1))->SetBitmap(m_bmp[m_bk_num++]);
	if (m_bk_num==14)
		m_bk_num=0;






	CDialog::OnTimer(nIDEvent);


}

添加OnCtlColor响应,并添加如下代码(主要是把背景刷白)

HBRUSH CGIF_DLGDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
	HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	if (pWnd==this)
	{
		return m_bkbrush;
	}
	// TODO: Return a different brush if the default is not desired
	return hbr;
}

就这么简单,这里设置的是80ms的时间间隔,貌似这里看不到动画。

我把程序源代码和程序效果图以及生成的程序已经打包到了CSDN共享里,有兴趣的可以试试!


欢迎转载~~~