高仿QQ2012登录界面

高仿QQ2012登录界面, 用的是MFC写的Direct UI 方式,支持换肤,先看效果图







QQ透明皮肤:多层算法,一键适配各种背景 

代码和这个的方法有点像,分为背景层,质感层,内容层

背景层:最下面的是背景层,QQ的界面当要做为皮肤的图片小于界面时其他的地方就会用图片的平均颜色来填充,在图片和平均颜色的地方还有个过滤的效果
过度效果如下图



取得平均颜色的代码如下

// 取得图片平均颜色
bool GetAverageColor(CDC *pDC, CBitmap &bitmap, const CSize &sizeImage, COLORREF &clrImage)
{
	bool bIsResult = false;

	CDC TempDC;
	TempDC.CreateCompatibleDC(pDC);
	CBitmap *pOldBitmap = TempDC.SelectObject(&bitmap);

	int nWidth = sizeImage.cx;
	int nHeight = sizeImage.cy;
	// 定义位图信息   
	BITMAPINFO bi;  
	bi.bmiHeader.biSize = sizeof(bi.bmiHeader);  
	bi.bmiHeader.biWidth = nWidth;  
	bi.bmiHeader.biHeight = nHeight;  
	bi.bmiHeader.biPlanes = 1;  
	bi.bmiHeader.biBitCount = 32;   
	bi.bmiHeader.biCompression = BI_RGB;   
	bi.bmiHeader.biSizeImage = nWidth * nHeight * 4; // 32 bit   
	bi.bmiHeader.biClrUsed = 0;  
	bi.bmiHeader.biClrImportant = 0;  

	// 获取位图数据   
	BYTE* pBits = (BYTE*)new BYTE[bi.bmiHeader.biSizeImage];  
	::ZeroMemory(pBits, bi.bmiHeader.biSizeImage);  

	int nLine = ::GetDIBits(TempDC.m_hDC, (HBITMAP)bitmap.GetSafeHandle(), 0, nHeight, pBits, &bi, DIB_RGB_COLORS);
	if (!nLine)  
	{  
		delete []pBits;  
		pBits = NULL;  
	} 
	else
	{
		long r = 0, g = 0, b = 0;

		for (LONG i = 0; i < nWidth; i++)     
		{     
			for (LONG j = 0; j < nHeight; j++)     
			{     
				b += pBits[(j * nWidth + i) * 4];					
				g += pBits[(j * nWidth + i) * 4 + 1];
				r += pBits[(j * nWidth + i) * 4 + 2];		
			}     
		}  

		delete []pBits;  
		pBits = NULL;  
		int n = nWidth * nHeight;
		clrImage = RGB(r / n, g / n, b / n);
		bIsResult = true;
	}

	TempDC.SelectObject(pOldBitmap);
	TempDC.DeleteDC();

	return bIsResult;
}

质感层:质感层可以只是一个带透明度的矩形(一般为白色吧),可以是整个矩形透明度一样,也可以从上到下减少如下图


左边的效果是如四个区域组成,右边的是四个区域分开的效果


内容层: 内容层也就是控件层了没什么好说的,少个质感层的话会是这种效果





其他方面也就没什么了,详情请看代码


如果发现在BUG什么的或有别的实现方法可以联系我QQ:278162354

附源代码下载地址



评论 53
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值