- HRESULT ShowPic(LPCWSTR lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight)
- {
- HDC hDC_Temp=GetDC(hWnd);
- IPicture *pPic;
- IStream *pStm;
- BOOL bResult; HANDLE hFile=NULL;
- DWORD dwFileSize,dwByteRead;
- //打开硬盘中的图形文件
- 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;
- } //分配全局存储空间
- 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)
- RECT rc;
- GetClientRect(hWnd, &rc);
- bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight, 0,hmHeight,hmWidth,-hmHeight,&rc);
- ::ReleaseDC(hWnd,hDC_Temp);
- pPic->Release();
- CloseHandle(hFile);//关闭打开的文件
- if (SUCCEEDED(bResult))
- {
- return S_OK;
- }
- else
- {
- return E_FAIL;
- }
- }
VC 6.0 用IPicture接口显示JPEG图片代码
最新推荐文章于 2019-08-02 15:27:06 发布
本文提供了一个使用OLE技术从文件加载并显示图片的C++函数示例。该函数通过创建文件流、读取图片数据,并利用IPicture接口将图片渲染到指定窗口中。
334

被折叠的 条评论
为什么被折叠?



