将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);
}

解决方案 »

  1.   

    if(!::TransparentBlt(memBGDC.GetSafeHdc(), 0, 0, rt.Width(), rt.Height(), memFGDC.GetSafeHdc(), 0, 0, rt.Width(), rt.Height(), RGB(0,0,0)))
            return ; 
      

  2.   

    这里有一个win32贴图的例子,对比一下
    http://www.relisoft.com/win32/bitmap.html
      

  3.   

    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 ; 改为: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 
      

  4.   

     
    我改成如下的代码: 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);
    但是还是贴不上去,不过现在的情况是把前景图放大到和背景图一样 然后把背景图覆盖了
      

  5.   

    我试过好使的啊
    目标HDC的尺寸和客户区相同,源HDC的尺寸小于等于bmp的尺寸
      

  6.   

      BITMAP* pFGBmp = new BITMAP;
      FGBMP.GetBitmap(pFGBmp);
      BITMAP* pBGBmp = new BITMAP;
      BGBMP.GetBitmap(pBGBmp);
    加断点调试,检查 你的pFGBmp 和pBGBmp 是否取到了图片的参数 .