📄 mylabel.cpp
字号:
// 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 + -