+ -
当前位置:首页 → 问答吧 → 为什么我的代码使用TransparentBlt,什么都不显示呢?

为什么我的代码使用TransparentBlt,什么都不显示呢?

时间:2011-10-28

来源:互联网

如题,很简单的代码。
类CBitmapWnd是从CWnd继承过来的一个控件。

C/C++ code

void CBitmapWnd::OnPaint()
{
    CPaintDC dc(this);
    BITMAP bm;
    m_FootBallBitmap.GetBitmap(&bm);

    int nWidth = bm.bmWidth;
    int nHeight = bm.bmHeight;
    COLORREF crMask = RGB(0xff,0xff,0xff);
    CDC ImageDC;
    ImageDC.CreateCompatibleDC(&dc);
    CBitmap *pOldImageBMP = ImageDC.SelectObject(&m_FootBallBitmap);
    ::TransparentBlt(dc.m_hDC,50,40,nWidth,nHeight,ImageDC.m_hDC,0,0,nWidth,nHeight,crMask);
    
    ImageDC.SelectObject(pOldImageBMP);
}

作者: Developerljm   发布时间: 2011-10-28

先直接贴图,看看m_FootBallBitmap是否有问题!
然后,再试试直接贴出ImageDC.m_hDC,看看是否有问题!
另外,CreateCompatibleDC对应deletedc

作者: fandh   发布时间: 2011-10-28

替换到这个函数 dc.BitBlt (0, 0, nWidth, nHeight, &ImageDC, 0, 0, SRCCOPY);
没有问题。

引用 1 楼 fandh 的回复:

先直接贴图,看看m_FootBallBitmap是否有问题!
然后,再试试直接贴出ImageDC.m_hDC,看看是否有问题!
另外,CreateCompatibleDC对应deletedc

作者: Developerljm   发布时间: 2011-10-28

继续顶

作者: Developerljm   发布时间: 2011-10-28

新进展,改成下面代码可以显示了,但是却没有透明效果。

C/C++ code
    ::TransparentBlt(dc.m_hDC,[color=#FF0000]0,0[/color],nWidth,nHeight,ImageDC.m_hDC,0,0,nWidth,nHeight,crMask);

作者: Developerljm   发布时间: 2011-10-28

您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖
相关规定详见界面界面版关于版主结帖工作的具体办法

作者: xianglitian   发布时间: 2011-11-21

在我使用TransparentBlt函数的时候,也发现了这个问题,用BitBlt可以显示,TransparentBlt就不能。

后经过测试,发现是TransparentBlt函数第9个和第10个参数的问题,

即nWidthSrc 和nHeightSrc这两个参数

这两个参数必须小于或等于位图的实际宽度和高度,否则此函数会调用失败,

在使用中要特别注意。

作者: haohello   发布时间: 2011-11-30

void CChildView::OnPaint()
{
  CPaintDC dc(this);

  CBitmap bmp, *oldBmp;
  BITMAP bitmap;
  bmp.LoadBitmap(IDB_BITMAP1); // 从资源加载位图
  bmp.GetObject(sizeof BITMAP, &bitmap); // 获取位图的宽高等信息
  CDC memDC;
  memDC.CreateCompatibleDC(&dc);
  oldBmp = memDC.SelectObject(&bmp);

  TransparentBlt(
  dc.m_hDC,
  0,0,
  bm.bmWidth,bm.bmHeight,
  memDC.m_hDC,
  0,0,
  bm.bmWidth,bm.bmHeight, // 这两个参数必须小于或等于位图的实际宽度和高度
  RGB(0,0,0)); // 设置黑色为透明色

  memDC.SelectObject(oldBmp);
}

作者: haohello   发布时间: 2011-11-30

上面TransparentBlt函数里的 bm 应该是 bitmap

作者: haohello   发布时间: 2011-11-30

热门下载

更多