前几天在要在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);
在此也特别感谢《透明位图原理及代码》作者。