最近在学习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共享里,有兴趣的可以试试!
欢迎转载~~~