代码如下 但是这样写的画在图片出现的时候就会整幅图出现 我是想有点效果 比如说图片从左到右出现 或者 图片从上到下出现 或者百叶窗形式出现 请问我这代码该怎么改?? 谢谢先HRESULT CAlbumDlg::ShowPic(char *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight) 

//HDC hdc;定义一个设备上下文的句柄,在API中用
HDC hDC_Temp=::GetDC(hWnd); 

IPicture *pPic; 
IStream *pStm; 

BOOL bResult; 

HANDLE hFile=NULL; 
DWORD dwFileSize,dwByteRead; 

//打开硬盘中的图形文件 
/*CreateFile函数创建或打开下列对象,并返回一个可以用来访问这些对象的句柄。HANDLE CreateFile(LPCTSTR lpFileName,     //指向文件名的指针DWORD dwDesiredAccess,     //访问模式(写/读)DWORD dwShareMode,     //共享模式LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针DWORD dwCreationDisposition,    //如何创建DWORD dwFlagsAndAttributes,    //文件属性HANDLE hTemplateFile     //用于复制文件句柄);
*/
hFile=CreateFile(lpstrFile,GENERIC_READ, 
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); 

if (hFile!=INVALID_HANDLE_VALUE) 

dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数 

if (dwFileSize==0xFFFFFFFF) 
return E_FAIL; 

else 

return E_FAIL; 


//分配全局存储空间 
//调用函数GlobalAlloc来分配系统内存,让不同的进程实现共享数据
//文章出处:http://www.diybl.com/course/3_program/vc/vc_js/2008428/111796.html
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize); 
LPVOID pvData = NULL;  if (hGlobal == NULL) 
return E_FAIL; 

if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块 
return E_FAIL; 

ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区 

GlobalUnlock(hGlobal); 

CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); 

//装入图形文件 
bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic); 

if(FAILED(bResult)) 
return E_FAIL; 

OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度 
OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度 
pPic->get_Width(&hmWidth); 
pPic->get_Height(&hmHeight); 

//将图形输出到屏幕上(有点像BitBlt) 
//从src这个图中取出xsrc,ysrc,cxsrc,cysrc这部分,贴在x,y,cx,cy这块区域上面
bResult=pPic->Render(hDC_Temp,GetSystemMetrics(SM_CXSCREEN)/6,0,nScrWidth,nScrHeight, 
0,hmHeight,hmWidth,-hmHeight,NULL); 

pPic->Release(); 

CloseHandle(hFile);//关闭打开的文件 

if (SUCCEEDED(bResult)) 

return S_OK; 

else 

return E_FAIL; 

}

解决方案 »

  1.   

    呵呵,楼主想法不错,你以为这是PowerPoint啊,这个估计用DirectX做会好些,用GDI估计会比较麻烦
      

  2.   

    图片从上到下出现:从图像底部开始,将图像逐行复制到目标对象的顶部。每复制完一行后,下一次复制就增加一行,同时加上一定时间的延时。百叶窗:首先将图像垂直等分为N等分,然后分N次完成每部分图像的向下扫描显示。但扫描显示时,按照差值扫描进行,即第n次扫描显示n,n+N,...,n+i*N条扫描线。例如如果N=8,则第一次显示1,9,17,...条扫描线。第二次显示2,8,9,18,...条扫描线,知道图像完整显示。这些特效需要一定的算法,你自己研究下或看下相关的书。