Posted on 2008-08-30 20:43
Ben仔 閱讀(644)
評論(0) 編輯 收藏 引用 所屬分類:
c++
//下面為根據指定的位圖以及要去掉的顏色生成一個區域
HRGN SetRgn(HBITMAP hBitmap,COLORREF clrKey)
{
CBitmap bitmap ;
bitmap.Attach(hBitmap) ;
BITMAP bitmapInfo ;
bitmap.GetBitmap(&bitmapInfo) ;
int nRow = bitmapInfo.bmHeight ;
int nCol = bitmapInfo.bmWidth ;
CDC memDC ;
memDC.CreateCompatibleDC(NULL) ;
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap) ;
CRgn rgn ;
rgn.CreateRectRgn(0,0,nCol,nRow) ;
for(int y = 0; y < nRow; y++)
{
for(int x = 0; x < nCol; x++)
{
COLORREF clrPixel = memDC.GetPixel(y,x) ;
if(clrPixel == clrKey)//去除關鍵色
{
CRgn rgnTemp ;
rgnTemp.CreateRectRgn(y,x,y+1,x+1) ;
rgn.CombineRgn(pRgn,&rgnTemp,RGN_XOR) ;
rgnTemp.DeleteObject() ;
}
}
}
memDC.SelectObject(pOldBitmap) ;
memDC.DeleteDC() ;
bitmap.Detach() ;
(HRGN)return rgn.Detach() ;
}
根據生成的區域設置窗口
void SetWndRgn(HWND hWnd,HBITMAP hBitmap)
{
HRGN hRgn = SetRgn(hBitmap,clrKey)//其中clrKey為要mask掉的顏色值
SetWindowRgn(hRgn) ;
return ;
}
網上找到1個代碼例子
下載另外1個方法是用 SetLayeredWindowAttributes 例子
下載