将BGBMPID显示为背景,然后将FGBMPID中黑色的部分透明化之后在背景的基础上显示出来。现在的效果是什么也显示不出来,背景图和前景图都没有显示出来 请问哪一步出错了 void CMyDlg::Show2BMP(UINT FGBMPID, UINT BGBMPID)
{
CRect rt;
CDC *pDC = GetDC();
pDC->GetClipBox(&rt);
CDC memBGDC;
CDC memFGDC;
CBitmap BGBMP;
CBitmap FGBMP;
if (rt.Width() < 1)
{
return;
}
BGBMP.LoadBitmap(BGBMPID);
FGBMP.LoadBitmap(FGBMPID);
if(!memFGDC.CreateCompatibleDC(pDC))
return;
if (!memBGDC.CreateCompatibleDC(pDC))
return;
memBGDC.SelectObject(&BGBMP);
memFGDC.SelectObject(&FGBMP);
if(!::TransparentBlt(memBGDC.GetSafeHdc(), rt.left, rt.top, rt.Width(), rt.Height(), memFGDC.GetSafeHdc(), rt.left, rt.top, rt.Width(), rt.Height(), RGB(0,0,0)))
return ; pDC->BitBlt(rt.left, rt.top, rt.Width(), rt.Height(), &memBGDC, 0, 0, SRCCOPY);
}
{
CRect rt;
CDC *pDC = GetDC();
pDC->GetClipBox(&rt);
CDC memBGDC;
CDC memFGDC;
CBitmap BGBMP;
CBitmap FGBMP;
if (rt.Width() < 1)
{
return;
}
BGBMP.LoadBitmap(BGBMPID);
FGBMP.LoadBitmap(FGBMPID);
if(!memFGDC.CreateCompatibleDC(pDC))
return;
if (!memBGDC.CreateCompatibleDC(pDC))
return;
memBGDC.SelectObject(&BGBMP);
memFGDC.SelectObject(&FGBMP);
if(!::TransparentBlt(memBGDC.GetSafeHdc(), rt.left, rt.top, rt.Width(), rt.Height(), memFGDC.GetSafeHdc(), rt.left, rt.top, rt.Width(), rt.Height(), RGB(0,0,0)))
return ; pDC->BitBlt(rt.left, rt.top, rt.Width(), rt.Height(), &memBGDC, 0, 0, SRCCOPY);
}
return ;
http://www.relisoft.com/win32/bitmap.html
return ; 改为:if(!::TransparentBlt(memBGDC.GetSafeHdc(), rt.left, rt.top, rt.Width(), rt.Height(), memFGDC.GetSafeHdc(), 0,0,800,600,RGB(0,0,0)))
return ;
这里假定你第二张图片的尺寸为800,600
我改成如下的代码: BITMAP* pFGBmp = new BITMAP;
FGBMP.GetBitmap(pFGBmp); BITMAP* pBGBmp = new BITMAP;
BGBMP.GetBitmap(pBGBmp); if(!::TransparentBlt(memBGDC.GetSafeHdc(), 0, 0, pBGBmp->bmWidth, pBGBmp->bmHeight,\
memFGDC.GetSafeHdc(), 0, 0, pFGBmp->bmWidth, pFGBmp->bmHeight, RGB(255,255,255)))
{
int errorcode = GetLastError();
return ;
}
pDC->BitBlt(rt.left, rt.top, rt.Width(), rt.Height(), &memBGDC, 0, 0, SRCCOPY);
但是还是贴不上去,不过现在的情况是把前景图放大到和背景图一样 然后把背景图覆盖了
目标HDC的尺寸和客户区相同,源HDC的尺寸小于等于bmp的尺寸
FGBMP.GetBitmap(pFGBmp);
BITMAP* pBGBmp = new BITMAP;
BGBMP.GetBitmap(pBGBmp);
加断点调试,检查 你的pFGBmp 和pBGBmp 是否取到了图片的参数 .