前幾天在要在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);
在此也特別感謝《透明位圖原理及代碼》作者。