MFC 播放动画。

来源:互联网 发布:app免费下载软件 编辑:程序博客网 时间:2024/06/07 03:02

原本用CxImage实现这个loading的效果的。但是在后续工作中用到boost::log。

他们中有一些冲突。如果两个都是设置了文件路径:

cximage动态加载。log设置写路径之后。


他们分别需要下面设置为不同的值,因为字符集采用Unicode,所以编译cximage相关dll的时候设置为否,同时用的时候也要用否。

然而log中需要用是。真他妈蛋疼。



因为不想再用cximage(当然可以用流的方式加载,但是不想再出差错,要加快进度),采用的方式如下。

1.用flash把gif导出序列(*.png)。

2.在vs中添加资源。

3.然后写上这个代码。


这里不能用loadfromresource,因为这个只能处理bmp文件,如果用png,需要采用从流中加载的方式。

写得比较菜。

void CTSLodingDialog::DrawBitmap(bool isFirst/*=false*/){HINSTANCE hInst = AfxGetResourceHandle();HRSRC hRsrc = ::FindResource (hInst,MAKEINTRESOURCE(IDB_PNG1+m_nFrame),_T("PNG")); if(!hRsrc){return;}CImage image;auto len = SizeofResource(hInst, hRsrc);auto lpRsrc = (BYTE*)LoadResource(hInst, hRsrc);if (!lpRsrc){return ;}auto hMem = GlobalAlloc(GMEM_FIXED, len);auto pmem = (BYTE*)GlobalLock(hMem);memcpy(pmem,lpRsrc,len);IStream* pstm;CreateStreamOnHGlobal(hMem,FALSE,&pstm);image.Load(pstm);GlobalUnlock(hMem);pstm->Release();FreeResource(lpRsrc);if(!image.IsNull()){auto pDC = this->GetDC();if(image.Draw(pDC->m_hDC,0,0)){if(isFirst){m_pictureCtrl.MoveWindow(0,0,image.GetWidth(), image.GetHeight());this->MoveWindow(0,0,image.GetWidth(), image.GetHeight());CenterWindow();}++m_nFrame;m_nFrame = m_nFrame >= 17 ? 0 : m_nFrame;}this->ReleaseDC(pDC);}image.Destroy();//这里加上,不然泄漏}




0 0
原创粉丝点击