找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 579|回复: 12

高仿QQ2012登录界面

[复制链接]

52

主题

62

回帖

0

积分

版主

积分
0
发表于 2013-10-6 21:31:13 | 显示全部楼层 |阅读模式
高仿QQ2012登录界面, 用的是MFC写的Direct UI 方式,支持换肤,先看效果图
[attachment=1088]


[attachment=1089]


[attachment=1090]


[attachment=1091]


[attachment=1092]


[attachment=1093]





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


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

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

[attachment=1094]

取得平均颜色的代码如下
  1. // 取得图片平均颜色
  2. bool GetAverageColor(CDC *pDC, CBitmap &bitmap, const CSize &sizeImage, COLORREF &clrImage)
  3. {
  4.     bool bIsResult = false;
  5.     CDC TempDC;
  6.     TempDC.CreateCompatibleDC(pDC);
  7.     CBitmap *pOldBitmap = TempDC.SelectObject(&bitmap);
  8.     int nWidth = sizeImage.cx;
  9.     int nHeight = sizeImage.cy;
  10.     // 定义位图信息   
  11.     BITMAPINFO bi;  
  12.     bi.bmiHeader.biSize = sizeof(bi.bmiHeader);  
  13.     bi.bmiHeader.biWidth = nWidth;  
  14.     bi.bmiHeader.biHeight = nHeight;  
  15.     bi.bmiHeader.biPlanes = 1;  
  16.     bi.bmiHeader.biBitCount = 32;   
  17.     bi.bmiHeader.biCompression = BI_RGB;   
  18.     bi.bmiHeader.biSizeImage = nWidth * nHeight * 4; // 32 bit   
  19.     bi.bmiHeader.biClrUsed = 0;  
  20.     bi.bmiHeader.biClrImportant = 0;  
  21.     // 获取位图数据   
  22.     BYTE* pBits = (BYTE*)new BYTE[bi.bmiHeader.biSizeImage];  
  23.     ::ZeroMemory(pBits, bi.bmiHeader.biSizeImage);  
  24.     int nLine = ::GetDIBits(TempDC.m_hDC, (HBITMAP)bitmap.GetSafeHandle(), 0, nHeight, pBits, &bi, DIB_RGB_COLORS);
  25.     if (!nLine)  
  26.     {  
  27.         delete []pBits;  
  28.         pBits = NULL;  
  29.     }
  30.     else
  31.     {
  32.         long r = 0, g = 0, b = 0;
  33.         for (LONG i = 0; i < nWidth; i++)     
  34.         {     
  35.             for (LONG j = 0; j < nHeight; j++)     
  36.             {     
  37.                 b += pBits[(j * nWidth + i) * 4];                    
  38.                 g += pBits[(j * nWidth + i) * 4 + 1];
  39.                 r += pBits[(j * nWidth + i) * 4 + 2];        
  40.             }     
  41.         }  
  42.         delete []pBits;  
  43.         pBits = NULL;  
  44.         int n = nWidth * nHeight;
  45.         clrImage = RGB(r / n, g / n, b / n);
  46.         bIsResult = true;
  47.     }
  48.     TempDC.SelectObject(pOldBitmap);
  49.     TempDC.DeleteDC();
  50.     return bIsResult;
  51. }
复制代码
质感层:质感层可以只是一个带透明度的矩形(一般为白色吧),可以是整个矩形透明度一样,也可以从上到下减少如下图



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




[attachment=1095]


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


[attachment=1096]



[attachment=1097]



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


以上内容转至csdn...


本章全部源代码回复可见!!
[attachment=1098][attachment=1099]



2

主题

25

回帖

0

积分

新手上路

积分
0
发表于 2013-10-6 23:47:39 | 显示全部楼层
我看看

0

主题

7

回帖

0

积分

新手上路

积分
0
发表于 2013-10-7 15:44:20 | 显示全部楼层
厉害啊

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-10-7 22:22:02 | 显示全部楼层
高手

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-10-9 15:59:41 | 显示全部楼层
高手

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-10-9 16:40:40 | 显示全部楼层
很好

0

主题

3

回帖

0

积分

新手上路

积分
0
发表于 2013-10-9 18:36:30 | 显示全部楼层
这个厉害 啊、

0

主题

1

回帖

0

积分

新手上路

积分
0
发表于 2013-10-11 00:58:35 | 显示全部楼层
好强悍呀

0

主题

6

回帖

0

积分

新手上路

积分
0
发表于 2013-10-12 07:11:13 | 显示全部楼层
是用VC++编写的么?

1

主题

23

回帖

0

积分

新手上路

积分
0
发表于 2013-11-10 07:20:23 | 显示全部楼层
:                                                      
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 03:31 , Processed in 0.167675 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表