MFC 对话框背景图片每隔一秒显示一张,图片格式一定要是PNG,JPG格式,其他的不用
MFC 对话框背景图片每隔1秒显示一张,图片格式一定要是PNG,JPG格式,其他的不用。
MFC中,如何给基本对话框加上JPG格式的背景图片。。。。
我的题目意思是:10张JPG格式,或者PNG格式的图片,作为对话框的背景图片,且每隔1秒显示一张。(再次强调:不用BMP格式的图片。)
下面的代码是我从网上看的,但不知道放到程序的哪里,是OnInitDialog();还是OnPaint();还是其他的什么地方。
这代码好像太复杂了吧。。 我的题目意思是:10张JPG格式,或者PNG格式的图片,作为对话框的背景图片,且每隔1秒显示一张。(再次强调:不用BMP格式的图片。)
望高手帮忙啊!感谢! 望CSDN里的高手们帮忙。。
------解决方案--------------------
http://wenku.baidu.com/view/a2b0b48b84868762caaed5c8.html
用这个直接load吧
------解决方案--------------------
用CImage现实jpg文件很容易
动画效果可以吧要绘制的图片放到一个数组里
然后通过始终消息改变数组下标
------解决方案--------------------
------解决方案--------------------
就是搞个定时器,不停的贴图刷新!
------解决方案--------------------
也可以用GDI+
------解决方案--------------------
还是老规矩,你把代码发到我mail里面吧
------解决方案--------------------
你没有初始化,我不是回MAIL给你了么?
------解决方案--------------------
你把我给你发的两个文件替换一下就OK了!
MFC中,如何给基本对话框加上JPG格式的背景图片。。。。
我的题目意思是:10张JPG格式,或者PNG格式的图片,作为对话框的背景图片,且每隔1秒显示一张。(再次强调:不用BMP格式的图片。)
下面的代码是我从网上看的,但不知道放到程序的哪里,是OnInitDialog();还是OnPaint();还是其他的什么地方。
- C/C++ code
#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文件很容易
动画效果可以吧要绘制的图片放到一个数组里
然后通过始终消息改变数组下标
------解决方案--------------------
------解决方案--------------------
就是搞个定时器,不停的贴图刷新!
------解决方案--------------------
也可以用GDI+
------解决方案--------------------
还是老规矩,你把代码发到我mail里面吧
------解决方案--------------------
你没有初始化,我不是回MAIL给你了么?
------解决方案--------------------
你把我给你发的两个文件替换一下就OK了!