在MFC当中,怎么动态加载图片(bmp、jpg、gif等),还有就是如果使用picture控件,代码该怎么写?

注意:问题有两个... 注意:问题有两个 展开
 我来答
学习编程吧
2011-07-29 · TA获得超过1240个赞
知道小有建树答主
回答量:669
采纳率:0%
帮助的人:460万
展开全部
给你个例子 利用流
工程基于对话框 名字是IPicture 建好工程后 加入下面的代码 就可以显示图片了
// IPictureDlg.h : 头文件
BOOL DisplayPic(CString strFileName, HWND hWnd, int nScrWidth, int nScrHeight);

// IPictureDlg.cpp : 实现文件
BOOL CIPictureDlg::DisplayPic(CString strFileName, HWND hWnd, int nScrWidth, int nScrHeight)
{
HDC hDC=::GetDC(hWnd);

IPicture *pPicture;
IStream *pStream;

HRESULT hResult;

HANDLE hFile = NULL;
DWORD dwFileSize,dwByteRead;

hFile = CreateFile(strFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
return E_FAIL;
}

dwFileSize = GetFileSize(hFile, NULL);

HGLOBAL hGlobal = ::GlobalAlloc(GHND, dwFileSize);
if(hGlobal == NULL)
{
AfxMessageBox("图形文件装载出错!");
return E_FAIL;
}

LPVOID lpData = NULL;

lpData = ::GlobalLock(hGlobal);

ReadFile(hFile, lpData, dwFileSize, &dwByteRead, NULL);
::GlobalUnlock(hGlobal);

if(CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) != S_OK)
{
AfxMessageBox("流初始化失败!");
return E_FAIL;
}

hResult = OleLoadPicture(pStream, dwFileSize, TRUE, IID_IPicture, (LPVOID*) &pPicture);

if(FAILED(hResult))
{
AfxMessageBox("图形文件装载出错!");
return E_FAIL;
}

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

//将图形输出到屏幕上
hResult = pPicture->Render(hDC, 0, 0, nScrWidth, nScrHeight, 0, hmHeight, hmWidth, -hmHeight, NULL);

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

pPicture->Release();
// Free memory.
::GlobalFree(hGlobal);

if (SUCCEEDED(hResult))
{
return S_OK;
}
else
{
AfxMessageBox("图形文件装载出错!");
return E_FAIL;
}
}

void CIPictureDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
static char szFilter[] = "JPG Files (*.jpg)|*.jpg|BMP Files (*.bmp)|*.bmp|GIF Files (*.gif)|*.gif|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE, "BMP", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
if(dlg.DoModal() != IDOK)
return;

CRect rect;
GetDlgItem(IDC_STATIC)->GetWindowRect(rect);
DisplayPic(dlg.GetPathName(),GetDlgItem(IDC_STATIC)->GetSafeHwnd(), rect.Width(), rect.Height());
}
gmajdgvt
2011-07-29 · TA获得超过456个赞
知道小有建树答主
回答量:159
采纳率:0%
帮助的人:112万
展开全部
GDI好像只能显示BMP,如果硬要用GDI显示的话就要用流了,那个蛮麻烦的,
其实用GDI+来显示的话,只用调个函数就行了,蛮方便的,关键是看编绎器支不支持,不支持还得装GDI+
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
何处淬吴钩
2011-07-30 · TA获得超过5045个赞
知道大有可为答主
回答量:2947
采纳率:50%
帮助的人:2411万
展开全部
用CImage类,load,bitblt。一共不超过10行代码
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2011-07-29
展开全部
vc加载图片网上代码多了去了,google去吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式