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

📄 mylabel.cpp

📁 一个多方面查询的系统,也是很辛苦找到,并且做管理系统很多方面都用到的
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MyLabel.cpp: implementation of the CMyLabel class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "front.h"
#include "MyLabel.h"
#include "MyEdit.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMyLabel::CMyLabel()
{
}

CMyLabel::~CMyLabel()
{
	if(lstrlen(cName)>0)
		delete cName;

//	delete pImageList;

	if(bmpIcon)
	{
		bmpIcon->DeleteObject();
		delete bmpIcon;
	}

	if(iShape==5&&pEdit)delete pEdit;
}

CMyLabel::CMyLabel(char *name, int shape,int imageindex,bool bimage, bool brename,UINT nPID,UINT nMID,CWnd *pParent,bool fromfile)
{
	if (name)
	{
		cName = new char[lstrlen(name)+1];
		ASSERT(cName);
		lstrcpy(cName, name);
	}

	iShape=shape;
	bIsFile=fromfile;
	bImage=bimage; //是否画图标
	iImageIndex=imageindex;

	bPressed=false;
	bPass=false;  //鼠标滑过时为真
	bRename=brename; //是否可换名
	bEnable=true;
	bmpWidth=16;  //默认图像宽度
	StretchWidth=0;//图像拉申宽度

	PID=nPID;
	MID=nMID;
	iAct=-1;

	pParentWnd=pParent;

	crBodercol=GetSysColor(COLOR_BACKGROUND)+1;
	crBackcol=GetSysColor(COLOR_BACKGROUND);
	crPressed=RGB(243, 243, 243);
	crHilightBorder = GetSysColor(COLOR_3DHILIGHT);
	crDkShadowBorder = GetSysColor(COLOR_3DDKSHADOW);
	crBackGroundColor = RGB(204,204,204);
	crBackGroundColor1 = GetSysColor(COLOR_BACKGROUND);
	crPass=RGB(247, 248, 251);

	//默认图像列表
//	SetImageList(IDB_MY_LIST);

	bSelect=false;  //复选时标志

	bmpIcon=new CBitmap;

	if(iShape==5)pEdit=new CMyEdit;

	crTextColor=RGB(0,0,0);  //字体颜色

	bEditShow=false;  //表示pEdit的出现
	dwEditStyle=NULL;

	bVisible=true;

	//控制shape3动画
	iAnimate=2;
	iAnimateStep=2;
	bAnimate=false;
	iDirect=1;   //shape3图像摆动的方向

	//字体
	font=CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT));
}

void CMyLabel::SetImageList(UINT nID)
{
	pImageList=new CImageList;
	pImageList->Create(nID, 16, 0, RGB(0,128,128));
}


void CMyLabel::DrawLabel(CDC *pDC)
{
	if(!bVisible)return;

	pDC->SetTextColor(crTextColor);

	if(bEditShow)return;  //如果有输入框就不画了

	CFont *of=pDC->SelectObject(font);

	//按钮
	if(iShape==1)
		if(!bPressed)  //不按下
		{
			CPen *pOldPen,pen;
			CBrush *pOldBrush,brush;

			pen.CreatePen(PS_SOLID | PS_COSMETIC, 1, crBodercol);

			if(!bPass)brush.CreateSolidBrush(RGB(194, 210, 241));
			else  brush.CreateSolidBrush(crPass);
		
			pOldPen = pDC->SelectObject(&pen);
			pOldBrush = pDC->SelectObject(&brush);

			pDC->RoundRect(LabelRect,CPoint(8,8));

			pDC->SelectObject(pOldPen);
			pDC->SelectObject(pOldBrush);


			if(!bImage)  //无图标,字体框由LabelRect决定
				pDC->DrawText(CString(cName), LabelRect, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
			else       //有图标
			{
				CSize szLabel(0,0);
				szLabel=pDC->GetTextExtent(cName,lstrlen(cName));

				CPoint ImagepointStart,LabelpointStart;

				ImagepointStart.x=LabelRect.left+(LabelRect.CenterPoint().x-LabelRect.left)/3;
				ImagepointStart.y=LabelRect.CenterPoint().y-8;

				LabelpointStart.x=ImagepointStart.x+20;
				LabelpointStart.y=LabelRect.CenterPoint().y-szLabel.cy/2;

				rcImage.SetRect(ImagepointStart.x,ImagepointStart.y,ImagepointStart.x+16,ImagepointStart.y+16);
				rcLabel.SetRect(LabelpointStart.x,LabelpointStart.y,LabelRect.right-5,LabelpointStart.y+szLabel.cy);

				if(!bIsFile)
				{
					if(pImageList)pImageList->Draw(pDC,iImageIndex,ImagepointStart,ILD_NORMAL);
				}
				else
				{
					CBitmap *OldBmp;
					CDC DCMem;
					DCMem.CreateCompatibleDC(pDC);
					OldBmp=DCMem.SelectObject(bmpIcon);
									
					BITMAP *bmp=new BITMAP;
					bmpIcon->GetBitmap(bmp);

					pDC->StretchBlt(ImagepointStart.x-StretchWidth,ImagepointStart.y-StretchWidth,bmpWidth+2*StretchWidth,bmpWidth+2*StretchWidth,&DCMem,0,0,bmp->bmWidth,bmp->bmHeight,SRCCOPY);
					DCMem.SelectObject(OldBmp);
					DCMem.DeleteDC();

					delete bmp;
				}
					

				
				pDC->DrawText(CString(cName), rcLabel, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
			}
		}
		else  //按下,此时不存在改名情况
		{
			CPen *pOldPen,pen,pen1;
			CBrush *pOldBrush,brush,brush1;

			brush.CreateSolidBrush(crDkShadowBorder);
			pen.CreatePen(PS_SOLID | PS_COSMETIC, 1, GetSysColor(COLOR_BACKGROUND));
			pOldBrush = pDC->SelectObject(&brush);
			pOldPen = pDC->SelectObject(&pen);

			pDC->RoundRect(LabelRect,CPoint(8,8));


			brush1.CreateSolidBrush(RGB(196, 236, 245));
			pDC->SelectObject(&brush1);
			pen1.CreatePen(PS_SOLID | PS_COSMETIC, 1, RGB(194, 210, 241));
			pDC->SelectObject(&pen1);


			CRect temprc;
			temprc.SetRect(LabelRect.left+2,LabelRect.top+2,LabelRect.right-2,LabelRect.bottom-2);
			pDC->RoundRect(temprc,CPoint(8,8));
	
			COLORREF col;

			for(int i=LabelRect.left;i<LabelRect.right;i++)
				for(int j=LabelRect.top;j<LabelRect.bottom;j++)
				{
					col=pDC->GetPixel(i,j);
					if(col==crDkShadowBorder&&(j>LabelRect.bottom-3||i>LabelRect.right-3||(j>LabelRect.bottom-4||i>LabelRect.right-4)))
					{ 
						pDC->SetPixel(i,j,crHilightBorder);
					} 
				} 

			pDC->SelectObject(pOldPen);
			pDC->SelectObject(pOldBrush);

			if(!bImage) //无图标
			{
				temprc.SetRect(LabelRect.left+1,LabelRect.top+1,LabelRect.right+1,LabelRect.bottom+1);
				pDC->DrawText(CString(cName), temprc, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
			}
			else    //有图标
			{
				CSize szLabel(0,0);
				CRect rcImageTemp,rcLabelTemp;
				szLabel=pDC->GetTextExtent(cName,lstrlen(cName));

				CPoint ImagepointStart,LabelpointStart;

				ImagepointStart.x=LabelRect.left+(LabelRect.CenterPoint().x-LabelRect.left)/3;
				ImagepointStart.y=LabelRect.CenterPoint().y-8;

				LabelpointStart.x=ImagepointStart.x+20;
				LabelpointStart.y=LabelRect.CenterPoint().y-szLabel.cy/2;

				rcImageTemp.SetRect(ImagepointStart.x,ImagepointStart.y,ImagepointStart.x+16,ImagepointStart.y+16);
				rcLabelTemp.SetRect(LabelpointStart.x,LabelpointStart.y,LabelRect.right-5,LabelpointStart.y+szLabel.cy);


				rcLabelTemp.SetRect(rcLabelTemp.left+1,rcLabelTemp.top+1,rcLabelTemp.right+1,rcLabelTemp.bottom+1);
				ImagepointStart.x+=1;
				ImagepointStart.y+=1;


				if(!bIsFile)
				{
					if(pImageList)pImageList->Draw(pDC,iImageIndex,ImagepointStart,ILD_NORMAL);
				}
				else
				{
					CBitmap *OldBmp;
					CDC DCMem;
					DCMem.CreateCompatibleDC(pDC);
					OldBmp=DCMem.SelectObject(bmpIcon);
									
					BITMAP *bmp=new BITMAP;
					bmpIcon->GetBitmap(bmp);

					pDC->StretchBlt(ImagepointStart.x-StretchWidth,ImagepointStart.y-StretchWidth,bmpWidth+2*StretchWidth,bmpWidth+2*StretchWidth,&DCMem,0,0,bmp->bmWidth,bmp->bmHeight,SRCCOPY);
					DCMem.SelectObject(OldBmp);
					DCMem.DeleteDC();

					delete bmp;
				}
				
				if(lstrlen(cName)>0)pDC->DrawText(CString(cName), rcLabelTemp, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
			}
		}


		//属性框标题
		if(iShape==2)
		{
			CPen *pOldPen,pen,pen1;
			CBrush *pOldBrush,brush,brush1;

			brush.CreateSolidBrush(crBackcol);
			brush1.CreateSolidBrush(crPressed);
			pen1.CreatePen(PS_SOLID | PS_COSMETIC, 1, crPressed);
			pen.CreatePen(PS_SOLID | PS_COSMETIC, 1, crBodercol);

			pOldBrush = pDC->SelectObject(&brush);
			pOldPen = pDC->SelectObject(&pen);


			CRect rc;
			rc.SetRect(LabelRect.left,LabelRect.top,LabelRect.left+LabelRect.Width()/2,LabelRect.top+LabelRect.Height()/2);
			pDC->RoundRect(rc,CPoint(10,10));


			
			int i,j;
			for(i=rc.left;i<rc.right;i++)
				for(j=rc.top;j<rc.bottom;j++)
					if((i>rc.left+1&&j>rc.top+1)||i>rc.CenterPoint().x||j>rc.CenterPoint().y)
					if(crBodercol==pDC->GetPixel(i,j))pDC->SetPixel(i,j,crBackcol);
			


			rc.SetRect(LabelRect.left,LabelRect.top,LabelRect.right+LabelRect.Width(),LabelRect.bottom);
			pDC->Arc(rc,CPoint(LabelRect.left,LabelRect.CenterPoint().y),CPoint(LabelRect.right+1,LabelRect.bottom));

			pDC->MoveTo(LabelRect.left,LabelRect.CenterPoint().y);
			pDC->LineTo(LabelRect.left,LabelRect.CenterPoint().y-LabelRect.Height()/3);
			pDC->MoveTo(LabelRect.left+LabelRect.Width()/4,LabelRect.top);
			pDC->LineTo(LabelRect.right,LabelRect.top);
			pDC->LineTo(LabelRect.right,LabelRect.bottom);

			pDC->FloodFill(LabelRect.CenterPoint().x,LabelRect.CenterPoint().y,crBodercol);

			if(bPressed)
			{
				pDC->SelectObject(&brush1);
				pDC->FloodFill(LabelRect.CenterPoint().x,LabelRect.CenterPoint().y,crBodercol);
				pDC->SelectObject(&pen1);
				pDC->MoveTo(LabelRect.right,LabelRect.top+1);
				pDC->LineTo(LabelRect.right,LabelRect.bottom-1);
			}


			pDC->SelectObject(pOldPen);
			pDC->SelectObject(pOldBrush);

	
			if(bImage)
			{
				CPoint ImageStartPoint;
				ImageStartPoint.x=LabelRect.CenterPoint().x-6;
				ImageStartPoint.y=LabelRect.CenterPoint().y-LabelRect.Height()/7-6;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -