如何通过图片文件的路径在mfc对话框中动态显示图片?

芯若止水0^0 2012-03-09 03:04:54
其实是一个数据库,点击不同的数据项便搜索相应的图片文件路径,然后显示在对话框右下方的一个框框里。请问该如何实现?采用某个控件还是用哪个函数?
多谢!
...全文
251 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2012-03-09
  • 打赏
  • 举报
回复
用CImage比较简单
zgszft 2012-03-09
  • 打赏
  • 举报
回复
读取,然后把它画出来
详情请
1、Google“文件选择框”
2、Google “MFC显示图片”
3、Google “Invalidate()的用法”
疯狂-的-蜗牛 2012-03-09
  • 打赏
  • 举报
回复
用这个函数比较容易:

HRESULT ShowPic(CDC *pDC,CString lpstrFile,int x,int y, int nScrWidth, int nScrHeight)//对指定路径文件缩放处理
{
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)
{
CloseHandle(hFile);
return E_FAIL;
}
}
else
{
return E_FAIL;
}


//分配全局存储空间
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
if(hGlobal==NULL)
return E_FAIL;

LPVOID pvData =GlobalLock(hGlobal);

if(pvData==NULL)//锁定分配内存块
{
GlobalFree(hGlobal);
return E_FAIL;
}
ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区
CloseHandle(hFile);//关闭打开的文件

GlobalUnlock(hGlobal);

CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);

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

if(FAILED(bResult))
return E_FAIL;

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


//将图形输出到屏幕上(有点像BitBlt)
bResult=pPic->Render(pDC->m_hDC,x,y,nScrWidth,nScrHeight,0,hmHeight,hmWidth,-hmHeight,NULL);

pPic->Release();

if(SUCCEEDED(bResult))
{
return S_OK;
}
else
{
return E_FAIL;
}
}

然后在对话框的OnPaint()中调用ShowPic(&dc,strPath,……)函数,其中strPath设置成对话框成员变量CString类型
路径名每次改变了就Invalidate()一下就好

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧