MFC将位图背景透明

  前几天在要在MFC的对话框(不是在控件上)中要加入一个位图,位图贴到对话框中发现位图的白色背景也在,跟想要得到的效果不一样。于是在园子中找到了这篇文章《透明位图原理及代码》http://www.cnblogs.com/Caiqinghua/archive/2009/02/16/1391945.html,我用了高亮显示的那部分代码,实现了想要的效果,但是会在位图下方出现一个相同图形的黑白色的图片,如果不想要显示这个“面具”图片,只要把下面这行代码注释掉即可。

pDC->BitBlt(0, bm.bmHeight, nWidth, nHeight, &dcTrans, 0, 0, SRCCOPY);

然后我又在OnPaint()函数的else中简化了一下代码,也显示了同样的效果,特地把它记录一下。代码如下:

CPaintDC dc(this);
//获得对话框客户区大小
CRect rect;
GetClientRect(rect);

CDC dcImage, dcTrans;
//加载位图
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1是导入的位图ID

//取得位图的详细信息
BITMAP bm;
bitmap.GetBitmap(&bm);
int nWidth = bm.bmWidth;
int nHeight = bm.bmHeight;
//创建兼容DC
dcImage.CreateCompatibleDC(&dc);
CBitmap *pOldBitmapImage = dcImage.SelectObject(&bitmap);
//强制设置位图背景色为白色
dcImage.SetBkColor(RGB(255, 255, 255));
//位图背景色与操作
dc.BitBlt(rect.Width() - nWidth, 10, nWidth, nHeight, &dcImage, 0, 0, SRCAND);
dcImage.SelectObject(pOldBitmapImage);    

在此也特别感谢《透明位图原理及代码》作者。

posted @ 2014-12-13 15:34  情敌贝多芬  阅读(4571)  评论(0)    收藏  举报