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

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM