读书人

MFC 对话框背景图片每隔1秒显示一张

发布时间: 2013-01-25 15:55:29 作者: rapoo

MFC 对话框背景图片每隔1秒显示一张,图片格式一定要是PNG,JPG格式,其他的不用。
本帖最后由 xianglitian 于 2011-10-19 21:22:21 编辑 MFC中,如何给基本对话框加上JPG格式的背景图片。。。。

我的题目意思是:10张JPG格式,或者PNG格式的图片,作为对话框的背景图片,且每隔1秒显示一张。(再次强调:不用BMP格式的图片。)

下面的代码是我从网上看的,但不知道放到程序的哪里,是OnInitDialog();还是OnPaint();还是其他的什么地方。


#ifndef HIMETRIC_INCH
#define HIMETRIC_INCH 2540
#endif
CString picfullname = "test.jpg";
CDC* pDC = GetDC();
IPicture* pPic;
IStream* pStm;

CFileStatus fstatus; //CFileStatus文件属性类
CFile file;
LONG cb;

//打开文件并获得文件的真实大小
if(file.Open(picfullname, CFile::modeRead)
&&file.GetStatus(picfullname, fstatus)
&&(-1 != (cb = fstatus.m_size)))
{
//从堆中分配指定数量字节的一整块,这时系统无法提供零零碎碎的局部或全局的堆
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if(NULL != hGlobal)
{
//锁定全局内存对象并返回它的首地址
if(NULL != (pvData = GlobalLock(hGlobal)))
{
//把文件内容读进全局内存对象的地址空间中
file.ReadHuge(pvData, cb);
//GlobalUnlock函数把以GMEM_MOVEABLE方式分配的内存对象的锁定计数器减1
GlobalUnlock(hGlobal);
//从全局内存中创建stream对象,第二个参数指定当stream释放时是否自动释放全局内存
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm);
//创建一个新的picture对象并用stream对象中的内容初始化
if(SUCCEEDED(OleLoadPicture(pStm, fstatus.m_size, TRUE, IID_IPicture, (LPVOID*)&pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight;
//得到picture对象中图片的宽和高
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);

int nWidth = MulDiv(hmWidth, pDC->GetDeviceCaps(LOGPIXELSX), HIMETRIC_INCH);
int nHeight = MulDiv(hmHeight, pDC->GetDeviceCaps(LOGPIXELSY), HIMETRIC_INCH);
pStm->Release();
pStm = NULL;
//把图像显示在dc中
CRect rect;
GetClientRect(&rect);
//if(FAILED(pPic->Render(*pDC, 0, 0, (DWORD)nWidth, (DWORD)nHeight, 0, hmHeight, hmWidth, -hmHeight, NULL)))
if(FAILED(pPic->Render(*pDC, 0, 0, rect.Width(), rect.Height(), 0, hmHeight, hmWidth, -hmHeight, NULL)))
{
MessageBox("图片出错!", "提示", MB_ICONINFORMATION);
}
pDC->SetBkMode(TRANSPARENT);


//释放不要的picture对象,并把指针清空
pPic->Release();
pPic = NULL;
//释放不要的全局内存对象,这个千万别忘了(32位程序不需要这行,系统会自动释放;16位程序一定要)
FreeResource(hGlobal);
}
else
{
MessageBox("图片出错!", "提示", MB_ICONINFORMATION);
}
}
}
}
else
{
MessageBox("图片出错!", "提示", MB_ICONINFORMATION);
}




这代码好像太复杂了吧。。 我的题目意思是:10张JPG格式,或者PNG格式的图片,作为对话框的背景图片,且每隔1秒显示一张。(再次强调:不用BMP格式的图片。)

望高手帮忙啊!感谢! 望CSDN里的高手们帮忙。。


[解决办法]
http://wenku.baidu.com/view/a2b0b48b84868762caaed5c8.html

用这个直接load吧

[解决办法]
用CImage现实jpg文件很容易
动画效果可以吧要绘制的图片放到一个数组里
然后通过始终消息改变数组下标
[解决办法]
引用:
向立天。能不能简单贴个代码啊! 先谢谢你啦!

CImage怎么用随便搜搜就有了啊
load加载
Draw绘制
OnTimer里index++
[解决办法]
就是搞个定时器,不停的贴图刷新!
[解决办法]
也可以用GDI+
[解决办法]
还是老规矩,你把代码发到我mail里面吧

[解决办法]
你没有初始化,我不是回MAIL给你了么?
[解决办法]
你把我给你发的两个文件替换一下就OK了!

读书人网 >VC/MFC

热点推荐