我在MFC对话框中添加一张大的位图作为背景,然后又添加了一张位图,但是第二次添加的位图有白边。 5
要明确两个情况:
如果原图上没有这个白边,那么是你代码问题,检查位图编解码代码和位图控制代码,这个要根据实际代码分析。
如果原图自带的白边(或者说白色区域)需要透明(通常是非规则图形需要),那么,关注一下API函数TransparentBlt
BOOL TransparentBlt(HDC hdcDest, int nXOriginDest, int
nYOriginDest, int nWidthDest, int hHeightDest, HDC hdcSrc, int
nXOriginSrc, int nYOriginSrc, int nWidthSrc, int nHeightSrc, UINT
crTransparent);
参数:
hdcDest:指向目标设备环境的句柄。
nXOriginDest:指定目标矩形左上角的X轴坐标,坐标以逻辑单位表示。
nYOriginDest:指定目标矩形左上角的Y轴坐标,坐标以逻辑单位表示。
nWidthDest:指定目标矩形的宽度。
nHeightDest:指定目标矩形的高度。
hdcsrc:指向源设备环境的句柄。
nXOriginSrc:指定源矩形(左上角)的X轴坐标,坐标以逻辑单位表示。
nYOriginsrc:指定源矩形(左上角)的Y轴坐标,坐标以逻辑单位表示。
nWidthSrc:指定源矩形的宽度。
nHeightSrc:指定源矩形的高度。
crTransparent:源位图中的RGB值当作透明颜色。
位图自带的白边。我用的是pDC->BitBlt(118,470,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY),函数。
CRect rect;
GetClientRect(&rect);
CDC *pDC=GetDC();
CDC memdc;
memdc.CreateCompatibleDC(pDC);
bitmap3.LoadBitmap(IDB_Leftflection);
memdc.SelectObject(bitmap3);
pDC->BitBlt(118,470,rect.Width(),rect.Height(),&memdc,0,0,SRCCOPY);
这是我的代码。
这是我说的第二种情况,比较常见,通常是圆形或者特殊形状,需要透明显示。
用TransparentBlt(pDC->GetHandle(),....)代替pDC->BitBlt(...)
你直接搜函数名,可以找到大量示例代码,不复制了