1. 程式人生 > >建立透明點陣圖的方法

建立透明點陣圖的方法

在做介面開發的時候經常需要去建立透明的點陣圖,由於MFC沒有封裝這樣的函式,經過多方查詢資料和試驗,終於寫出了一個可以建立透明點陣圖的函式,下面給大家分享一下。




void BitTrans(
int nXDest, // 目標起點X
        int nYDest,// 目標起點Y
        int nWidthDest,// 目標寬度
        int nHeightDest,// 目標高度
CDC* pDC, // 目標DC
        int nXSrc,// 來源起點X
        int nYSrc,// 來源起點Y
        COLORREF crTrans// 透明色
        )
{
CMemDC dcImage(nWidthDest, nHeightDest,pDC);//臨時DC
CBitmap bmpMask;
bmpMask.CreateBitmap(nWidthDest, nHeightDest, 1, 1, NULL);            // 建立單色掩碼點陣圖
CDC dcMask;//掩碼DC 
dcMask.CreateCompatibleDC(pDC);
dcMask.SelectObject(bmpMask);
//將載入點陣圖的記憶體DC中的點陣圖,拷貝到臨時DC中
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, this, nXSrc, nYSrc, SRCCOPY);

// 設定臨時DC的透明色
dcImage.SetBkColor(crTrans);
//掩碼DC的透明區域為白色其他區域為黑色
dcMask.BitBlt(0, 0, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCCOPY);

//臨時DC透明區域為黑色,其他區域保持不變
dcImage.SetBkColor(RGB(0,0,0));
dcImage.SetTextColor(RGB(255,255,255));
dcImage.BitBlt( 0, 0, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);

// 目標DC透明部分保持螢幕不變,其他部分變成黑色
pDC ->SetBkColor(RGB(255,255,255));
pDC ->SetTextColor(RGB(0,0,0));
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcMask, 0, 0, SRCAND);
pDC ->BitBlt(nXDest, nYDest, nWidthDest, nHeightDest, &dcImage, 0, 0, SRCPAINT);