Posted on 2008-08-30 20:43
Ben仔 阅读(616)
评论(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 例子
下载