vs2005 MFC 显示图片的问题

jingjing_123 2009-01-16 04:43:06
BOOL CMyTestRecDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
CBitmap hBG;
HBITMAP hOldB;
BITMAP bm;
HDC hDst;//memory dc
CClientDC hdc(this);
hDst = CreateCompatibleDC(NULL);
hBG.LoadBitmap(IDB_BG);
hBG.GetBitmap(&bm);
hOldB=(HBITMAP)SelectObject(hDst, hBG);
BmpDrawToDC(hDst,201,31,IDB_REC_NOR);//资源ID 都是bmp的图片

StretchBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hDst,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
SelectObject(hDst,hOldB);
DeleteObject(hBG);
DeleteObject(hDst);
return true;
}

bool CMyTestRecDlg::BmpDrawToDC( HDC _dc, int PosX, int PosY, int ResID)
{
HDC _hTemp;
CBitmap _hbg;
HBITMAP _hOld;
BITMAP bm;

_hTemp = CreateCompatibleDC(NULL);
_hbg.LoadBitmap(ResID);
_hbg.GetBitmap(&bm);

_hOld = (HBITMAP)SelectObject(_hTemp,_hbg);

StretchBlt(_dc,PosX,PosY,bm.bmWidth,bm.bmHeight,_hTemp,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
SelectObject(_hTemp,_hOld);
DeleteObject(_hTemp);
DeleteObject(_hbg);
return TRUE;
}



调用BmpDrawToDC函数图片资源IDB_REC_NOR总不能贴在hDst上面,在vc6.0 MFC 里面都是可以的,在vs2005 PPC 的MFC里面怎么都贴不上去,大家看看这是怎么回事?
...全文
333 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
儿大不由爷 2009-01-19
  • 打赏
  • 举报
回复
要画的Bitmap加载成功了么?
儿大不由爷 2009-01-19
  • 打赏
  • 举报
回复
是我看错了
jingjing_123 2009-01-19
  • 打赏
  • 举报
回复
hDst是内存DC啊,要先画在内存DC上才能刷出来
jingjing_123 2009-01-19
  • 打赏
  • 举报
回复
搞定,揭贴[code=C/C++]
BOOL CMyTestRecDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
BITMAP bm;
CBitmap hBG;
CDC MemDC;
CBitmap MemBitmap;
hBG.LoadBitmap(IDB_BG); //背景图片
hBG.GetBitmap(&bm);//获取图片的大小 这里也可以直接给出大小,就不用 先LoadBitmap() 和GetBitmap()了

MemDC.CreateCompatibleDC(NULL);

MemBitmap.CreateCompatibleBitmap(pDC, bm.bmWidth, bm.bmHeight);
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);

BmpDrawToDC(MemDC,0,0, IDB_BG);//帖背景图片
BmpDrawToDC(MemDC,M_BtnPos[0].left,M_BtnPos[0].top, IDB_REC_NOR);//贴按钮

StretchBlt(pDC->GetSafeHdc(),0,0,bm.bmWidth,bm.bmHeight,MemDC,0,0, bm.bmWidth, bm.bmHeight,SRCCOPY);


DeleteObject(hBG);

MemBitmap.DeleteObject();
MemDC.DeleteDC();



//return CDialog::OnEraseBkgnd(pDC);
return true;
}

bool CMyTestRecDlg::BmpDrawToDC( HDC _dc, int PosX, int PosY, int ResID)
{
HDC _hTemp;
CBitmap _hbg;
HBITMAP _hOld;
BITMAP bm;

_hTemp = CreateCompatibleDC(NULL);
_hbg.LoadBitmap(ResID);
_hbg.GetBitmap(&bm);

_hOld = (HBITMAP)SelectObject(_hTemp,_hbg);

StretchBlt(_dc,PosX,PosY,bm.bmWidth,bm.bmHeight,_hTemp,
0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
SelectObject(_hTemp,_hOld);
DeleteObject(_hTemp);
DeleteObject(_hbg);
return TRUE;
}


code]
儿大不由爷 2009-01-16
  • 打赏
  • 举报
回复


StretchBlt(hdc,0,0,bm.bmWidth,bm.bmHeight,hDst,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
BmpDrawToDC(hDst,201,31,IDB_REC_NOR);//资源ID 都是bmp的图片

调一下顺序,如何?

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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