您的位置:首页 > 其它

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

2014-03-13 22:05 295 查看
最近在学习MFC,正好今天帮同学修了下照片,突发奇想想在MFC界面里添加一些动画,效果应该不错。

于是,开始动手实验。

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

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

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

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

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



上面结果,界面很简单。

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

下面是代码:


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共享里,有兴趣的可以试试!

欢迎转载~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息