MFC对话框显示JPEG图片

nq19860409 2009-04-10 10:53:16

运行对话框没有出现图片,我是否需要在对话框上添加控件吗,光凭以下代码就能显示12.jpg图片吗,以下代码应该放哪呢
CDC* pDC;
pDC=GetDC();
ShowPicture(pDC,"c:\\12.jpg",0,0,200,100);



#define HIMETRIC_INCH 2540
LPPICTURE gpPicture;
void CCDMADlg::ShowPicture(CDC *pDC, CString m_strBRoute, int x, int y, int width, int height)
{
HANDLE hFile =CreateFile(m_strBRoute, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL);
_ASSERTE(INVALID_HANDLE_VALUE != hFile);

// 取得文件大小
DWORD dwFileSize = GetFileSize(hFile, NULL);
_ASSERTE(-1 != dwFileSize);
LPVOID pvData = NULL;
//根据文件大小分配内存
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
_ASSERTE(NULL != hGlobal);
pvData = GlobalLock(hGlobal);
_ASSERTE(NULL != pvData);
DWORD dwBytesRead = 0;
//读取文件并存入全局内存
BOOL bRead = ReadFile(hFile, pvData, dwFileSize, &dwBytesRead, NULL);
_ASSERTE(FALSE != bRead);
GlobalUnlock(hGlobal);
CloseHandle(hFile);
LPSTREAM pstm = NULL;
// 通过全局内存创建 IStream* 的指针
HRESULT hr = CreateStreamOnHGlobal(hGlobal, TRUE, &pstm);
_ASSERTE(SUCCEEDED(hr) && pstm);
//通过图形文件创建IPicture 对象
if (gpPicture)
gpPicture->Release();
hr = OleLoadPicture(pstm, dwFileSize, FALSE, IID_IPicture, (LPVOID *)&gpPicture);
_ASSERTE(SUCCEEDED(hr) && gpPicture);
pstm->Release();
HDC hdc;
hdc=pDC->GetSafeHdc();
if (gpPicture)
{
// 取得图片的宽和高
long hmWidth;
long hmHeight;
gpPicture->get_Width(&hmWidth);
gpPicture->get_Height(&hmHeight);
//宽高转换为象素
int nWidth = MulDiv(hmWidth, GetDeviceCaps(hdc, LOGPIXELSX), HIMETRIC_INCH);
int nHeight = MulDiv(hmHeight, GetDeviceCaps(hdc, LOGPIXELSY), HIMETRIC_INCH);
RECT rc;
GetClientRect(&rc);/*取得客户区*/
gpPicture->Render(hdc, x,y, (int)height*hmWidth/hmHeight,height, 0, hmHeight, hmWidth, -hmHeight, &rc);
/*显示图片*/
}

}
...全文
1697 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
eilotyan 2011-06-22
  • 打赏
  • 举报
回复
很不错,就是有个内存问题,只要注释掉
if (gpPicture)
gpPicture->Release();
就可以了
谢谢
xszxsjk 2010-10-09
  • 打赏
  • 举报
回复
楼主编的不错,学习了~~
L403365234 2009-11-05
  • 打赏
  • 举报
回复
好东西,谢谢LZ!
superhswe 2009-11-01
  • 打赏
  • 举报
回复
很管用,受用了
alan_wanhao 2009-09-12
  • 打赏
  • 举报
回复
学习受用了
Clerk_9919 2009-04-10
  • 打赏
  • 举报
回复
放在对话框的OnPaint里

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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