⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skin.cpp

📁 模拟popo的一个程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -