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