VC++中用下面两个函数为什么不能显示图片?知道的帮帮忙!谢谢!

xiyuzou 2009-04-23 05:02:24
我用下面两个函数只能找到图片路径,就是没法显示图片,不知道错哪儿了?


void Ccontent::ShowPic(CString pathfile,int idc)
{
CBitmap hbmp;
HBITMAP hbitmap;
//将pStatic指向要显示的地方
CStatic *pStaic;
pStaic=(CStatic*)GetDlgItem(idc);
//装载资源
hbitmap=(HBITMAP)::LoadImage (::AfxGetInstanceHandle(),pathfile,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);
hbmp.Attach(hbitmap);
//获取图片格式
BITMAP bm;
hbmp.GetBitmap(&bm);
//创建临时的内存DC对象
CDC dcMem;
dcMem.CreateCompatibleDC(GetDC());
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);
CRect lRect;
pStaic->GetClientRect(&lRect);
lRect.NormalizeRect();
//显示位图
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(),
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&poldBitmap);

pStaic->ReleaseDC(&dcMem);
}

void Ccontent::OnOpenImage()
{
// TODO: Add your control notification handler code here
CFileDialog mFileDlg(TRUE);
if (mFileDlg.DoModal () != IDOK) return;
CString str(" ",10000);
mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);
str.ReleaseBuffer();
CWnd* pWnd = GetDlgItem(IDC_PIC);
CDC* pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
CPen* pPenRed = new CPen;
pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0));
CPen* pOldPen = pDC->SelectObject(pPenRed);

POSITION mPos=mFileDlg.GetStartPosition();
CString pathName(" ",128);

while(mPos!=NULL)
{
pathName=mFileDlg.GetNextPathName(mPos);

ShowPic(pathName,IDC_PIC);
}

}
...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
shexinwei 2009-04-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiyuzou 的帖子:]
CDC dcMem;
dcMem.CreateCompatibleDC(GetDC()); //这里用GetDC,认为不妥,应该定义成一个指针比较方便
CBitmap *poldBitmap=(CBitmap*)dcMem.SelectObject(hbmp);
CRect lRect;
pStaic->GetClientRect(&lRect);
lRect.NormalizeRect();
//显示位图
pStaic->GetDC()->StretchBlt(lRect.left ,lRect.top ,lRect.Width(),lRect.Height(), //在这里用上面的指针调用该函数即可
&dcMem,0 ,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
dcMem.SelectObject(&poldBitmap);

pStaic->ReleaseDC(&dcMem);
[/Quote]
这个函数楼主写得不大好,觉得应该有更大的改进
xiyuzou 2009-04-23
  • 打赏
  • 举报
回复
谢谢你的代码,不过运行了好多错误啊!
yqmqk123 2009-04-23
  • 打赏
  • 举报
回复
char appPath[256];
GetCurrentDirectory(256,appPath); //取得应用程序当前路径
CString FilePath;
FilePath.Format("%s",appPath);
FilePath+="";

hwnd = GetDlgItem(IDC_PHOTO);
hDesDC = hwnd->GetDC()->m_hDC;
hSrcDC = CreateCompatibleDC(hDesDC);
hBitmap=(HBITMAP)LoadImage(AfxGetInstanceHandle(),FilePath+m_photo,IMAGE_BITMAP,0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);

GetObject(hBitmap, sizeof BITMAP, &bm);
SelectObject(hSrcDC, hBitmap);

hwnd->GetClientRect(&rect);
::SetStretchBltMode(hDesDC,COLORONCOLOR);
::StretchBlt(hDesDC, rect.left, rect.top, rect.right, rect.bottom, hSrcDC, 0, 0, bm.bmWidth, bm.bmHeight,+SRCCOPY);
SetTimer(IDT_TIMER,50,NULL);

UpdateData(false);

19,464

社区成员

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

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