📄 skin.cpp
字号:
// Skin.cpp: implementation of the CSkin class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CNIcq.h"
#include "Skin.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
#define COLOR_WHITE RGB(255,255,255)
#define COLOR_BLACK RGB(0,0,0)
#define NCOLORSHADES 128 // this many shades in gradient
static void PaintRect(CDC* pDC, int x, int y, int w, int h, COLORREF color)
{
CBrush brush(color);
CBrush* pOldBrush = pDC->SelectObject(&brush);
pDC->PatBlt(x, y, w, h, PATCOPY);
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
}
void PaintGradiantRect(CDC *pDC, const RECT &rect,
COLORREF clrFrom, COLORREF clrTo, BOOL hori, BOOL ascend)
{
int cxCap = rect.right - rect.left;
int cyCap = rect.bottom - rect.top;
// Get the intensity values for the ending color
int r1 = GetRValue(clrTo); // red
int g1 = GetGValue(clrTo); // green
int b1 = GetBValue(clrTo); // blue
// Get the intensity values for the begining color
int r2 = GetRValue(clrFrom); // red
int g2 = GetGValue(clrFrom); // green
int b2 = GetBValue(clrFrom); // blue
int r, g, b;
if(hori) //paint horizontal rect;
{
int x = cxCap;
int w = x; // width of area to shade
int xDelta= max(w/NCOLORSHADES,1); // width of one shade band
while (x >= xDelta) {
x -= xDelta;
if (r1 > r2)
r = r1 - (r1-r2)*(w-x)/w;
else
r = r1 + (r2-r1)*(w-x)/w;
if (g1 > g2)
g = g1 - (g1-g2)*(w-x)/w;
else
g = g1 + (g2-g1)*(w-x)/w;
if (b1 > b2)
b = b1 - (b1-b2)*(w-x)/w;
else
b = b1 + (b2-b1)*(w-x)/w;
if(ascend) // Paint from left to right;
PaintRect(pDC, rect.left+x, rect.top, xDelta, cyCap, RGB(r, g, b));
else // Paint from right to left;
PaintRect(pDC, rect.right-x-xDelta, rect.top, xDelta, cyCap, RGB(r, g, b));
}
}
else //paint vertical rect;
{
int y = cyCap;
int w = y; // height of area to shade
int yDelta= max(w/NCOLORSHADES,1); // height of one shade band
//while (y >= yDelta) {
while (y > 0) {
y -= yDelta;
if (r1 > r2)
r = r1 - (r1-r2)*(w-y)/w;
else
r = r1 + (r2-r1)*(w-y)/w;
if (g1 > g2)
g = g1 - (g1-g2)*(w-y)/w;
else
g = g1 + (g2-g1)*(w-y)/w;
if (b1 > b2)
b = b1 - (b1-b2)*(w-y)/w;
else
b = b1 + (b2-b1)*(w-y)/w;
if(ascend) // Paint from top to bottom;
PaintRect(pDC, rect.left, rect.top+y, cxCap, yDelta, RGB(r, g, b));
else // Paint from bottom to top;
PaintRect(pDC, rect.left, rect.bottom-y-yDelta, cxCap, yDelta, RGB(r, g, b));
}
}
}
void DrawColorCube(CDC* pDC, CRect& rect,
COLORREF colorFrom, COLORREF colorTo /*= RGB(255,255,255)*/,
BOOL IsHori /*= true*/)
{
CRect newRect;
COLORREF color;
CPen* oldPen;
CBrush* oldBr;
/*
* If value as 0, draw a line here;
*/
if(rect.Width()<=0 )
rect.right = rect.left +2;
else if(rect.Height() <=0)
rect.top-=2;
BOOL backHori = IsHori;
IsHori = true;
/*
* draw first 1/3 part;
*/
if(IsHori)
{
newRect.SetRect(rect.left,rect.top,(rect.right - rect.left)/3+rect.left,rect.bottom);
PaintGradiantRect(pDC,newRect,colorFrom, colorTo);
}
else
{
newRect.SetRect(rect.left,rect.bottom - (rect.bottom-rect.top)/3,rect.right,rect.bottom);
PaintGradiantRect(pDC,newRect,colorFrom, colorTo, IsHori, false);
}
/*
* then left 2/3 part;
*/
if(IsHori)
{
newRect.SetRect((rect.right - rect.left)/3+rect.left,rect.top,rect.right,rect.bottom);
PaintGradiantRect(pDC,newRect,colorFrom, colorTo, IsHori, false);
}
else
{
newRect.SetRect(rect.left,rect.top, rect.right, rect.bottom - (rect.bottom-rect.top)/3);
PaintGradiantRect(pDC,newRect,colorFrom, colorTo, IsHori, true);
}
/*
* Frame the rect with colorFrom, with look better;
*/
CPen pen(PS_SOLID,2,colorFrom);
oldPen = (CPen*)pDC->SelectObject(&pen);
oldBr = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
pDC->Rectangle(&rect);
pDC->SelectObject(oldPen);
pDC->SelectObject(oldBr);
pen.DeleteObject();
/*
* Draw Shadow next;
*/
if(backHori)//hori
{
color = RGB(170,170,170);
CPen pen1(PS_SOLID,2,color);
oldPen = (CPen*)pDC->SelectObject(&pen1);
pDC->MoveTo(rect.left, rect.bottom+1);
pDC->LineTo(rect.right+1, rect.bottom+1);
pDC->LineTo(rect.right+1, rect.top);
color = RGB(190,190,190);
CPen pen2(PS_SOLID,2,color);
pDC->SelectObject(&pen2);
pDC->MoveTo(rect.left+1, rect.bottom+2);
pDC->LineTo(rect.right+2, rect.bottom+2);
pDC->LineTo(rect.right+2, rect.top+1);
pDC->SelectObject(oldPen);
pen1.DeleteObject();
pen2.DeleteObject();
}
else//vert
{
#if 0
color = RGB(170,170,170);
CPen pen1(PS_SOLID,1,color);
oldPen = (CPen*)pDC->SelectObject(&pen1);
pDC->MoveTo(rect.left, rect.top-2);
pDC->LineTo(rect.right+1, rect.top-2);
pDC->LineTo(rect.right+1, rect.bottom);
color = RGB(190,190,190);
CPen pen2(PS_SOLID,1,color);
pDC->SelectObject(&pen2);
pDC->MoveTo(rect.left+1, rect.top-3);
pDC->LineTo(rect.right+1, rect.top-3);
pDC->LineTo(rect.right+1, rect.bottom-1);
pDC->SelectObject(oldPen);
pen1.DeleteObject();
pen2.DeleteObject();
#endif
}
}
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CSkin::CSkin()
{
MainIcon = NULL;
MainBkImg = NULL;
MainStatus = NULL;
SmallStatus = NULL;
TabBkPhoto = NULL;
Corner = NULL;
ShortCutMenuIcon= NULL;
DragMenuPhoto = NULL;
NotifyUserAnimate= NULL;
MsgWndIcon = NULL;
Tab2Bmp = NULL;
TrayMenuIcon = NULL;
ChatSmallPhoto = NULL;
ULBmp = NULL;
ULMaskBmp = NULL;
}
CSkin::~CSkin()
{
DeleteAllObject(); //清除内存
}
BOOL CSkin::LoadSkin(CString SkinName)
{
CString SkinPath;
TCHAR exeFullPath[MAX_PATH];
//取应用程序名
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
//取路径
SkinPath = ((CCNIcqApp *)AfxGetApp())->ExtractFilePath(exeFullPath) + "Skin\\" + SkinName + "\\";
DeleteAllObject(); //清除内存
//加载位图
MainIcon = LoadBmpFile(SkinPath,SkinName,"MainIcon");
MainBkImg = LoadBmpFile(SkinPath,SkinName,"MainBkImg");
MainStatus = LoadBmpFile(SkinPath,SkinName,"MainStatus");
SmallStatus = LoadBmpFile(SkinPath,SkinName,"SmallStatus");
TabBkPhoto = LoadBmpFile(SkinPath,SkinName,"TabBkPhoto");
Corner = LoadBmpFile(SkinPath,SkinName,"Corner");
ShortCutMenuIcon = LoadBmpFile(SkinPath,SkinName,"ShortCutMenuIcon");
DragMenuPhoto = LoadBmpFile(SkinPath,SkinName,"DragMenuPhoto");
NotifyUserAnimate = LoadBmpFile(SkinPath,SkinName,"NotifyUserAnimate");
MsgWndIcon = LoadBmpFile(SkinPath,SkinName,"MsgWndIcon");
Tab2Bmp = LoadBmpFile(SkinPath,SkinName,"Tab2Bmp");
TrayMenuIcon = LoadBmpFile(SkinPath,SkinName,"TrayMenuIcon");
ChatSmallPhoto = LoadBmpFile(SkinPath,SkinName,"ChatSmallPhoto");
ULBmp = LoadBmpFile(SkinPath,SkinName,"ULBmp");
ULMaskBmp = LoadBmpFile(SkinPath,SkinName,"ULMaskBmp");
//----------------------------------------------------------------------------
//加载颜色
MainBk = GetColorValue(SkinPath,SkinName,"MainBk");
MainBorder = GetColorValue(SkinPath,SkinName,"MainBorder");
TreeGroupColor = GetColorValue(SkinPath,SkinName,"TreeGroupColor");
MaxMinBarColor = GetColorValue(SkinPath,SkinName,"MaxMinBarColor");
ShortCutBkColor = GetColorValue(SkinPath,SkinName,"ShortCutBkColor");
//----------------------------------------------------------------------------
DragWndFirstLine[0] = GetColorValue(SkinPath,SkinName,"DragWndFirstLine1");
DragWndFirstLine[1] = GetColorValue(SkinPath,SkinName,"DragWndFirstLine2");
DragWndFirstLine[2] = GetColorValue(SkinPath,SkinName,"DragWndFirstLine3");
DragWndSecLine[0] = GetColorValue(SkinPath,SkinName,"DragWndSecLine1");
DragWndSecLine[1] = GetColorValue(SkinPath,SkinName,"DragWndSecLine2");
DragWndSecLine[2] = GetColorValue(SkinPath,SkinName,"DragWndSecLine3");
DragWndThrLine[0] = GetColorValue(SkinPath,SkinName,"DragWndThrLine1");
DragWndThrLine[1] = GetColorValue(SkinPath,SkinName,"DragWndThrLine2");
DragWndThrLine[2] = GetColorValue(SkinPath,SkinName,"DragWndThrLine3");
DragWndFourLine[0] = GetColorValue(SkinPath,SkinName,"DragWndFourLine1");
DragWndFourLine[1] = GetColorValue(SkinPath,SkinName,"DragWndFourLine2");
DragWndFourLine[2] = GetColorValue(SkinPath,SkinName,"DragWndFourLine3");
//----------------------------------------------------------------------------
MsgWndEdgeClr = GetColorValue(SkinPath,SkinName,"MsgWndEdgeClr");
MsgWndPropTextIMClr = GetColorValue(SkinPath,SkinName,"MsgWndPropTextIMClr");
MsgWndPropTextSMSClr = GetColorValue(SkinPath,SkinName,"MsgWndPropTextSMSClr");
MsgWndToolBarBGClr = GetColorValue(SkinPath,SkinName,"MsgWndToolBarBGClr");
MsgWndSpaceTopLeftClr = GetColorValue(SkinPath,SkinName,"MsgWndSpaceTopLeftClr");
MsgWndSpaceBottomRightClr= GetColorValue(SkinPath,SkinName,"MsgWndSpaceBottomRightClr");
MsgWndVertBarClr = GetColorValue(SkinPath,SkinName,"MsgWndVertBarClr");
//----------------------------------------------------------------------------
TreeBkColor = GetColorValue(SkinPath,SkinName,"TreeBkColor");
MsgIWantColor = GetColorValue(SkinPath,SkinName,"MsgIWantColor");
TreeUserNameColor = GetColorValue(SkinPath,SkinName,"TreeUserNameColor");
EmailColor = GetColorValue(SkinPath,SkinName,"EmailColor");
ChatGrpColor = GetColorValue(SkinPath,SkinName,"ChatGrpColor");
ChatRoomColor = GetColorValue(SkinPath,SkinName,"ChatRoomColor");
ChatFocusColor = GetColorValue(SkinPath,SkinName,"ChatFocusColor");
//----------------------------------------------------------------------------
MsgWndToolTextClr = GetColorValue(SkinPath,SkinName,"MsgWndToolTextClr");
MsgWndVertBannerTextClr = GetColorValue(SkinPath,SkinName,"MsgWndVertBannerTextClr");
MsgWndVertBannerFlyByClr= GetColorValue(SkinPath,SkinName,"MsgWndVertBannerFlyByClr");
MsgWndVertToolTextClr = GetColorValue(SkinPath,SkinName,"MsgWndVertToolTextClr");
MsgWndVertToolFlyByClr = GetColorValue(SkinPath,SkinName,"MsgWndVertToolFlyByClr");
ChatWndVertListTextClr = GetColorValue(SkinPath,SkinName,"ChatWndVertListTextClr");
ChatIWantBarColor = GetColorValue(SkinPath,SkinName,"ChatIWantBarColor");
ChatShortCutBk = GetColorValue(SkinPath,SkinName,"ChatShortCutBk");
//----------------------------------------------------------------------------
ULImTextClr = GetColorValue(SkinPath,SkinName,"ULImTextClr");
ULImPropTextClr = GetColorValue(SkinPath,SkinName,"ULImPropTextClr");
ULImPropBGClr = GetColorValue(SkinPath,SkinName,"ULImPropBGClr");
ULImListTextClr = GetColorValue(SkinPath,SkinName,"ULImListTextClr");
ULImListBGClr = GetColorValue(SkinPath,SkinName,"ULImListBGClr");
//----------------------------------------------------------------------------
ULSmsTextClr = GetColorValue(SkinPath,SkinName,"ULSmsTextClr");
ULSmsPropTextClr = GetColorValue(SkinPath,SkinName,"ULSmsPropTextClr");
ULSmsPropBGClr = GetColorValue(SkinPath,SkinName,"ULSmsPropBGClr");
ULSmsListTextClr = GetColorValue(SkinPath,SkinName,"ULSmsListTextClr");
ULSmsListBGClr = GetColorValue(SkinPath,SkinName,"ULSmsListBGClr");
//----------------------------------------------------------------------------
ULChatTextClr = GetColorValue(SkinPath,SkinName,"ULChatTextClr");
ULChatPropTextClr = GetColorValue(SkinPath,SkinName,"ULChatPropTextClr");
ULChatPropBGClr = GetColorValue(SkinPath,SkinName,"ULChatPropBGClr");
ULChatListTextClr = GetColorValue(SkinPath,SkinName,"ULChatListTextClr");
ULChatListBGClr = GetColorValue(SkinPath,SkinName,"ULChatListBGClr");
//----------------------------------------------------------------------------
ULImLineClr = GetColorValue(SkinPath,SkinName,"ULImLineClr");
ULSmsLineClr = GetColorValue(SkinPath,SkinName,"ULSmsLineClr");
ULChatLineClr = GetColorValue(SkinPath,SkinName,"ULChatLineClr");
//----------------------------------------------------------------------------
ShortCutIWantTxtClr = GetColorValue(SkinPath,SkinName,"ShortCutIWantTxtClr");
ShortCutIWantFocusClr = GetColorValue(SkinPath,SkinName,"ShortCutIWantFocusClr");
ShortCutNormalTextClr = GetColorValue(SkinPath,SkinName,"ShortCutNormalTextClr");
ShortCutFocusTextClr = GetColorValue(SkinPath,SkinName,"ShortCutFocusTextClr");
//读取整数
TabIconTop = GetIntValue(SkinPath,SkinName,"TabIconTop");
TabIconLeft = GetIntValue(SkinPath,SkinName,"TabIconLeft");
IMTabSpace = GetIntValue(SkinPath,SkinName,"IMTabSpace");
IMTabTopEdge = GetIntValue(SkinPath,SkinName,"IMTabTopEdge");
AttachAllBitmap();
CreateAppImageList();
return TRUE;
}
CString CSkin::GetValue(LPCSTR Str)
{
CString Result = "";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -