读书人

为什么小弟我的代码使用TransparentBl

发布时间: 2012-02-04 15:43:08 作者: rapoo

为什么我的代码使用TransparentBlt,什么都不显示呢?
如题,很简单的代码。
类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);}


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

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

即nWidthSrc 和nHeightSrc这两个参数

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

在使用中要特别注意。

读书人网 >VC/MFC

热点推荐