怎么做一像Windows 缩略图 的功能?只是做一个浏览图片的功能. 怎么做一像Windows 缩略图 的功能?只是做一个浏览图片的功能. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 首先你要找到一个图片处理的库, 网上有开源的, 可以自动按比例放大缩小图片, 然后就很简单了, 你可以先随便建个DIALOG试下, 把图片目录打开, 读出图片, 用库函数缩小, 然后把图片用GDI函数按顺序贴在DIALOG上. 功能基本就这样了, 至于具体实现需要一个成熟的框架包装一下. http://www.codeproject.com/KB/miscctrl/ScalablePictureBox.aspx /********************************************** * 函 数 名: ShowPic* 描 述: 在控件窗口中预览图片* 输入参数: lpstrFile:文件名 hWnd nScrWidth:输出图片的宽度 nScrHeight:输出图片的高度 nScrWidth、nScrHeight是输出图片的实际大小,换而言之是指缩放后的尺寸 * 输出参数: 无* 返 回 值: 状态* 创 建 人: chenzhp* 日 期: 2007/03/15* 修改记录: * 修改人 修改日期 修改描述***************************************************/HRESULT CVlsChapDlg::ShowPic(char *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight) { // CWnd cWnd; // cWnd.FromHandle(hWnd); 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) bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight, 0,hmHeight,hmWidth,-hmHeight,NULL); pPic->Release(); CloseHandle(hFile);//关闭打开的文件 if (SUCCEEDED(bResult)) { return S_OK; } else { return E_FAIL; } } http://www.codeproject.com/KB/GDI-plus/GdiPThumbnailsViewer.aspx 金山界面库分析 求高手帮忙。。。 发布本人做的一个文件传送的软件 rich edit 的问题 两个字节无符号整形数,怎么表示? 动态改变菜单显示的内容 谁有最新的D版Ultimate Toolbox???高分相送,越新分越高,要多少您开价:) 介绍几本学习DCOM的好书 菜单连接到不同类上有何不同 怎样删除整形数组中相同的数? 这是一种组态软件最佳开发图形平台 两个进程间的通信问题
* 函 数 名: ShowPic
* 描 述: 在控件窗口中预览图片
* 输入参数: lpstrFile:文件名
hWnd
nScrWidth:输出图片的宽度
nScrHeight:输出图片的高度
nScrWidth、nScrHeight是输出图片的实际大小,换而言之是指缩放后的尺寸
* 输出参数: 无
* 返 回 值: 状态
* 创 建 人: chenzhp
* 日 期: 2007/03/15
* 修改记录:
* 修改人 修改日期 修改描述
***************************************************/
HRESULT CVlsChapDlg::ShowPic(char *lpstrFile,HWND hWnd,int nScrWidth,int nScrHeight)
{
// CWnd cWnd;
// cWnd.FromHandle(hWnd);
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)
bResult=pPic->Render(hDC_Temp,0,0,nScrWidth,nScrHeight,
0,hmHeight,hmWidth,-hmHeight,NULL); pPic->Release(); CloseHandle(hFile);//关闭打开的文件 if (SUCCEEDED(bResult))
{
return S_OK;
}
else
{
return E_FAIL;
}
}