窗体裁剪

来源:互联网 发布:哪里获得省市县的数据 编辑:程序博客网 时间:2024/05/22 00:47
void CDlgLogon::SetupRegion(CDC *pDC, CString BackPngName, COLORREF TransColor )
{
CRect cRect;
CRgn  wndRgn, rgnTemp;
//取得窗口大小


GetWindowRect(&cRect);
CPngImage ImageBack;
ImageBack.LoadImage(AfxGetInstanceHandle(),BackPngName);
ImageBack.DrawImage(pDC,0,0);


//首先创建默认的完整区域为完整的窗口区域
wndRgn.CreateRectRgn(0, 0, cRect.Width(),cRect.Height());


//下面的两层循环为检查背景位图象素颜色,进行透明区域处理;
//当象素颜色为指定的透明值时,即将该点从区域中剪裁掉。
COLORREF cl=0;
for(UINT x=0;x<=cRect.Width() ;x++)
{
for(UINT y =0; y<=cRect.Height(); y++)
{
//取得坐标处象素的颜色值
cl= pDC->GetPixel(x ,y);
if(cl== TransColor)
{
//象素颜色为指定的透明色,创建透明“微区域”
rgnTemp.CreateRectRgn(x,y, x+1, y+1);
//“扣像”,从完整的区域中“扣除”透明的“微区域”
wndRgn.CombineRgn(&wndRgn,&rgnTemp, RGN_XOR);
//删除刚创建的透明“微区域”,释放系统资源
rgnTemp.DeleteObject();  
}
}
}
ImageBack.DestroyImage();
//用设定窗口为指定的区域
SetWindowRgn((HRGN)wndRgn,TRUE);
}
0 0
原创粉丝点击