MFC不规则窗体

//效果截图如下(文后提供本例子的VS2008工程下载)

MFC不规则窗体_第1张图片

------------------------------------------------------------------------------------------------------------------------------------------------- ---

关于边边有杂色的问题,是因为边边的颜色和要透明的颜色不一样,只要用PS

将边边的颜色弄成和要透明的颜色一样就可以了,CF登陆窗口的背景图弄的就非常好,

这就看亲的PS功底了。

------------------------------------------------------------------------------------------------------------------------

主要代码如下:

//CDC *pDC, //窗体的DC指针
//CBitmap &cBitmap, //含有窗体形状的位图对象
//COLORREF TransColor //透明色
void CIrregularWndDlg::SetupRegionCDC(CDC * pDC, CBitmap & cBitmap, COLORREF TransColor)
{
	//本函数只调用一次即可,不然窗口会闪哦
	static int nExit=1;
	if (nExit>1)
	{
		return;
	}
	nExit++;

	CDC memDC;//创建与传入DC兼容的临时DC
	memDC.CreateCompatibleDC(pDC);
	CBitmap *pOldMemBmp = NULL;//将位图选入临时DC
	pOldMemBmp = memDC.SelectObject(&cBitmap);

	static CRgn wndRgn;//创建总的窗体区域,初始region为0
		wndRgn.CreateRectRgn(0, 0, 0, 0);

	BITMAP bit;
	cBitmap.GetBitmap (&bit);//取得位图参数,这里要用到位图的长和宽

	//逐个扫描图片的每个像素,如这个像素不属于透明色,
	//则在相应位置创建一个只含一个像素的region,然后将这些小region
	//合并起来组成一个任意形状的region
	int y;
	CRgn rgnTemp; //保存临时region	
	for(y = 0; y <= bit.bmHeight ; y++)
	{	
		int iX = 0;
		do
		{
			  //在图片的第y行寻找第一个非透明色的点
			  while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) == TransColor)
						iX++;
			  int iLeftX = iX;//记住这个起始点

				//在图片的第y行寻找第一个透明色的点
				while (iX <= bit.bmWidth && memDC.GetPixel(iX, y) != TransColor)
						++iX;

				//创建一个包含起点与终点间高为1像素的临时“region”
				rgnTemp.CreateRectRgn(iLeftX, y, iX, y + 1);
				

				//合并到主"region".
				wndRgn.CombineRgn(&wndRgn, &rgnTemp, RGN_OR);

				//删除临时"region",否则下次创建时会出错
				rgnTemp.DeleteObject();
		  }
		  while(iX<= bit.bmWidth); 
	}

		  this->SetWindowRgn(wndRgn, TRUE);
		  memDC.DeleteDC();
	}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

本例子VS2008工程下载:

http://download.csdn.net/detail/friendan/6202163    //MFC不规则窗体.zip

---------------------------------------------------------------------------------------------------------------------------------

您的十分满意是我追求的宗旨。

您的一点建议是我后续的动力。





你可能感兴趣的:(VC,MFC)