标签:mfc draw
/////////////////////////////////////////////////////////////////////////////
// CX_SelfView construction/destruction
//void DrawHMI(CDC *pDC, int NodeNum, CRect rect, int type, BOOL MasterNet, BOOL SlaveNet,int nParent = View)
void DrawHMI(CDC *pDC, int NodeNum, CRect rect, int type, WORD MasterNet, WORD SlaveNet,int nParent = View)
{
bool bTwinkleA= false;
bool bTwinkleB= false;
int left,right,top,bottom;
char text[10];
left = rect.left;
right = rect.right;
top = rect.top;
bottom = rect.bottom;
HGDIOBJ hPen1,hPen2,hOldPen;
HGDIOBJ hBrush,hBrushnet,hOldBrush;
HGDIOBJ hFont,hOldFont;
COLORREF OldColor,OldBkColor;
hBrush = CreateSolidBrush(RGB(0,0,255));
hBrushnet = CreateSolidBrush(RGB(128,128,128));
int wide = right-left;
int cross = bottom-top;
OldBkColor = pDC->SetBkColor(RGB(0,0,255));
OldColor = pDC->SetTextColor(RGB(0,0,0));
pDC->Rectangle(left+wide/8,top,right-wide/8,bottom-cross*2/5);
int top1 = bottom-cross*2/5;
pDC->Rectangle(left+wide/3,top1,right-wide/3,top1+cross/16);
top1+=cross/16;
pDC->Rectangle(left+wide/5,top1,right-wide/5,top1+cross/10);
top1+=cross/10;
hOldBrush = pDC->SelectObject(hBrush);
pDC->Rectangle(left+wide/8+wide/10,top+cross/10,right-wide/8-wide/10,bottom-cross/2);
pDC->Rectangle(left,top1,right,bottom);
hFont= (HGDIOBJ)CreateFont(15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, "TRUE TYPE FONTS");
hOldFont=pDC->SelectObject(hFont);
sprintf(text,"%d",NodeNum);
rect.left = rect.left;
rect.top = rect.top+cross/8;
rect.right = rect.right;
rect.bottom = rect.bottom;
pDC->SetBkColor(RGB(255,255,255));
pDC->SetTextColor(RGB(255,0,0));
pDC->DrawText(text,strlen(text),&rect,DT_CENTER);
/*
if (MasterNet) hPen1=(HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
if (SlaveNet) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen2 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
*/
if (MasterNet == 0xff) hPen1=(HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
/* else if((MasterNet==0) && (g_incount%2==0))
{
hPen1=NULL;
}
else
{
hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
}
*/
if (SlaveNet == 0xff) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen2 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
if(MasterNet==1)
{
bTwinkleA = true;
}
else
{
bTwinkleA = false;
}
if(SlaveNet==1)
{
bTwinkleB = true;
}
else
{
bTwinkleB = false;
}
/*
bTwinkleA = true;
bTwinkleB = true;
*/
hOldPen = pDC->SelectObject(hPen1);
if(type==0)
{
CRect rect1;
pDC->SelectObject(hOldBrush);
hOldBrush = pDC->SelectObject(hBrushnet);
pDC->MoveTo((left+right)/2-3,top);
if(bMultLev) //5行
{
if(bTwinkleA && (g_incount%2==0))
{
// pDC->LineTo((left+right)/2-3,top-47+2);
pDC->LineTo((left+right)/2-3,top-47+2+8);
}
else if(!bTwinkleA)
{
// pDC->LineTo((left+right)/2-3,top-47+2);
pDC->LineTo((left+right)/2-3,top-47+2+8);
}
// pDC->LineTo((left+right)/2-3,top-47+2);
/*
rect1.top =top-47+2-3 ;
rect1.bottom =top-47+2+3 ;
*/
rect1.top =top-47+2-3+8 ;
rect1.bottom =top-47+2+3+8 ;
}
else
{
if(bTwinkleA && (g_incount%2==0))
{
// pDC->LineTo((left+right)/2-3,top-60+2);
pDC->LineTo((left+right)/2-3,top-47+2);
}
else if(!bTwinkleA)
{
// pDC->LineTo((left+right)/2-3,top-60+2);
pDC->LineTo((left+right)/2-3,top-47+2);
}
// pDC->LineTo((left+right)/2-3,top-60+2);
// rect1.top =top-60+2-3 ;
// rect1.bottom =top-60+2+3 ;
rect1.top =top-47+2-3 ;
rect1.bottom =top-47+2+3 ;
}
rect1.left =(left+right)/2-3-3;
rect1.right =(left+right)/2-3+3 ;
pDC->Rectangle(&rect1);
pDC->SelectObject(hOldPen);
hOldPen = pDC->SelectObject(hPen2);
pDC->MoveTo((left+right)/2+3,top);
if(bMultLev)
{
if(bTwinkleB && (g_incount%2==0))
{
// pDC->LineTo((left+right)/2+3,top-32+2);
pDC->LineTo((left+right)/2+3,top-32+2+3);
}
else if(!bTwinkleB)
{
// pDC->LineTo((left+right)/2+3,top-32+2);
pDC->LineTo((left+right)/2+3,top-32+2+3);
}
/*
rect1.top =top-32+2-3 ;
rect1.bottom =top-32+2+3 ;
*/
rect1.top =top-32+2-3+3 ;
rect1.bottom =top-32+2+3+3 ;
}
else
{
if(bTwinkleB && (g_incount%2==0))
{
pDC->LineTo((left+right)/2+3,top-35+2);
}
else if(!bTwinkleB)
{
pDC->LineTo((left+right)/2+3,top-35+2);
}
rect1.top =top-35+2-3 ;
rect1.bottom =top-35+2+3 ;
}
rect1.left =(left+right)/2+3-3;
rect1.right =(left+right)/2+3+3 ;
pDC->Rectangle(&rect1);
}
pDC->SelectObject(hOldPen);
DeleteObject(hPen1);
DeleteObject(hPen2);
pDC->SetBkColor(OldBkColor);
pDC->SetTextColor(OldColor);
pDC->SelectObject(hOldBrush);
DeleteObject(hBrush);
DeleteObject(hBrushnet);
pDC->SelectObject(hOldFont);
DeleteObject(hFont);
// DeleteObject(hOldPen);
// DeleteObject(hOldBrush);
// DeleteObject(hOldFont);
}
//void DrawXCU(CDC* pDC,int NodeNum,CRect rect,int texttype,int linetype,int xcutype,BOOL MasterNet,BOOL SlaveNet,int nParent = View)
void DrawXCU(CDC* pDC,int NodeNum,CRect rect,int texttype,int linetype,int xcutype,WORD MasterNet,WORD SlaveNet,int nParent = View)
{
bool bTwinkleA= false;
bool bTwinkleB= false;
HGDIOBJ hPen1,hPen2,hOldPen;
HGDIOBJ hBrushtop,hBrushleft,hBrushforce,hBrushclient,hBrushnet,hOldBrush;
COLORREF OldBkColor;
int left,right,top,bottom;
char text[10];
left = rect.left;
right = rect.right;
top = rect.top;
bottom = rect.bottom;
int wide = right-left;
int cross = bottom-top;
COLORREF old_tClr = pDC->SetTextColor(RGB(0,0,0));
hBrushtop = CreateSolidBrush(RGB(0,0,128));
hBrushleft = CreateSolidBrush(RGB(0,128,128));
switch(xcutype)
{
case XCU_MAIN:
hBrushforce = CreateSolidBrush(RGB(0,255,0));
hBrushclient = CreateSolidBrush(RGB(0,255,0));
break;
case XCU_TRACE:
hBrushforce = CreateSolidBrush(RGB(0,0,255));
hBrushclient = CreateSolidBrush(RGB(0,0,255));
break;
case XCU_INIT:
hBrushforce = CreateSolidBrush(RGB(255,255,0));
hBrushclient = CreateSolidBrush(RGB(255,255,0));
break;
case NODE_OFFLINE:
hBrushforce = CreateSolidBrush(RGB(255,0,0));
hBrushclient = CreateSolidBrush(RGB(255,0,0));
break;
default:
break;
}
hBrushnet = CreateSolidBrush(RGB(128,128,128));
CPoint pts[4];
pts[0].x = left+wide/4;
pts[0].y = top;
pts[1].x = right;
pts[1].y = top;
pts[2].x = right-wide/4;
pts[2].y = top+cross/4;
pts[3].x = left;
pts[3].y = top+cross/4;
hOldBrush = pDC->SelectObject(hBrushtop);
pDC->Polygon(pts, 4);//画上面的阴影
pDC->SelectObject(hOldBrush);
DeleteObject(hBrushtop);
pts[0].x = right;
pts[0].y = bottom-cross/4;
pts[3].x = right-wide/4;
pts[3].y = bottom;
hOldBrush = pDC->SelectObject(hBrushleft);
pDC->Polygon(pts, 4);//画左边的阴影
pDC->SelectObject(hOldBrush);
DeleteObject(hBrushleft);
hOldBrush = pDC->SelectObject(hBrushforce);
pDC->Rectangle(left,top+cross/4,right-wide/4,bottom);//画正面方块
pDC->SelectObject(hOldBrush);
DeleteObject(hBrushforce);
hOldBrush = pDC->SelectObject(hBrushclient);
RECT r1 = rect;
sprintf(text,"%d",NodeNum);
rect.left = rect.left+9;
rect.top = rect.bottom;
rect.right = rect.right;
rect.bottom = rect.bottom + 40;
OldBkColor = pDC->SetBkColor(RGB(192,192,192));
if(texttype==XCU_TEXT) pDC->DrawText(text,strlen(text),&rect,DT_CENTER);
else if(texttype==XCU_TEXTCENTER) {
r1.top +=15;r1.bottom +=15;
pDC->DrawText(text,strlen(text),&r1,DT_CENTER);
}
pDC->SelectObject(hOldBrush);
DeleteObject(hBrushclient);
/*
if (MasterNet) hPen1 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
if (SlaveNet) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen2=(HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
*/
if (MasterNet == 0xff) hPen1=(HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen1 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,0,0));
if (SlaveNet == 0xff) hPen2 = (HGDIOBJ)CreatePen(PS_DOT,0,RGB(255,0,0));
else hPen2 = (HGDIOBJ)CreatePen(PS_SOLID,2,RGB(255,255,13));
if(MasterNet==1)
{
bTwinkleA = true;
}
else
{
bTwinkleA = false;
}
if(SlaveNet==1)
{
bTwinkleB = true;
}
else
{
bTwinkleB = false;
}
OldBkColor = pDC->SetBkColor(RGB(255,255,255));
if(linetype==XCU_LINE)
{
hOldPen=pDC->SelectObject(hPen1);
hOldBrush = pDC->SelectObject(hBrushnet);
pDC->MoveTo((left+right)/2-4,top);
CRect rect1;
if( nParent == View )
{
if( bMultLev )
{
if(bTwinkleA && (g_incount%2==0))
{
// pDC->LineTo((left+right)/2-4,rect.top-87+2);
pDC->LineTo((left+right)/2-4,rect.top-87+2+10+10); //change by hhs at 20130716
}
else if(!bTwinkleA)
{
// pDC->LineTo((left+right)/2-4,rect.top-87+2);
pDC->LineTo((left+right)/2-4,rect.top-87+2+10+10); //change by hhs at 20130716
}
/*
rect1.top =rect.top-87+2-3 ;
rect1.bottom =rect.top-87+2+3 ;
*/
rect1.top =rect.top-87+2-3 +10+10;
rect1.bottom =rect.top-87+2+3 +10+10;
}
else
{
if(bTwinkleA && (g_incount%2==0))
{
// pDC->LineTo((left+right)/2-4,rect.top-101+2);
pDC->LineTo((left+right)/2-4,rect.top-87+2);
}
else if(!bTwinkleA)
{
// pDC->LineTo((left+right)/2-4,rect.top-101+2);
pDC->LineTo((left+right)/2-4,rect.top-87+2);
}
// rect1.top =rect.top-101+2-3 ;
// rect1.bottom =rect.top-101+2+3 ;
rect1.top =rect.top-87+2-3 ;
rect1.bottom =rect.top-87+2+3 ;
}
}
else
{
/*
pDC->LineTo((left+right)/2-4,rect.top-101+2);
rect1.top =rect.top-101+2-3 ;
rect1.bottom =rect.top-101+2+3 ;
*/
pDC->LineTo((left+right)/2-4,rect.top-101+2+10+10-20); //单xcu画面中画网络连接线A网
rect1.top =rect.top-101+2-3+10+10-20 ;
rect1.bottom =rect.top-101+2+3+10+10-20 ;
}
rect1.left =(left+right)/2-4-3;
rect1.right =(left+right)/2-4+3 ;
pDC->Rectangle(&rect1);
pDC->SelectObject(hOldPen);
hOldPen = pDC->SelectObject(hPen2);
pDC->MoveTo((left+right)/2+4,top);
if(nParent == View)
{
if(bMultLev)
{
if(bTwinkleB && (g_incount%2==0))
{
// pDC->LineTo((left+right)/2+4,rect.top-72+2);
pDC->LineTo((left+right)/2+4,rect.top-72+2+10+10-5); //hhs
}
else if(!bTwinkleB)
{
// pDC->LineTo((left+right)/2+4,rect.top-72+2);
pDC->LineTo((left+right)/2+4,rect.top-72+2+10+10-5); //hhs
}
// rect1.top =rect.top-72+2-3 ;
// rect1.bottom =rect.top-72+2+3 ;
rect1.top =rect.top-72+2-3+10+10-5;
rect1.bottom =rect.top-72+2+3+10+10-5;
}
else
{
if(bTwinkleB && (g_incount%2==0))
{
// pDC->LineTo((left+right)/2+4,rect.top-75+2);
pDC->LineTo((left+right)/2+4,rect.top-72+2);
}
else if(!bTwinkleB)
{
// pDC->LineTo((left+right)/2+4,rect.top-75+2);
pDC->LineTo((left+right)/2+4,rect.top-72+2);
}
// rect1.top =rect.top-75+2-3 ;
// rect1.bottom =rect.top-75+2+3 ;
rect1.top =rect.top-72+2-3 ;
rect1.bottom =rect.top-72+2+3 ;
}
}
else if(nParent == Station)
{
// pDC->LineTo((left+right)/2+4,rect.top-75+2);
// rect1.top =rect.top-75+2-3 ;
// rect1.bottom =rect.top-75+2+3 ;
pDC->LineTo((left+right)/2+4,rect.top-75+2+10+10-15); //hhs
rect1.top =rect.top-75+2-3+10+10-5-15 ;
rect1.bottom =rect.top-75+2+3+10+10-5-15 ;
}
rect1.left =(left+right)/2+4-3;
rect1.right =(left+right)/2+4+3;
pDC->Rectangle(&rect1);
}
pDC->SelectObject(hOldPen);
DeleteObject(hPen1);
DeleteObject(hPen2);
// DeleteObject(hOldPen);
pDC->SelectObject(hOldBrush);
DeleteObject(hBrushnet);
// DeleteObject(hOldBrush);
pDC->SetBkColor(OldBkColor);
pDC->SetTextColor(old_tClr);
}
void DrawXCUHMI(CDC* pDC,int NodeNum,BYTE Type,RECT Rect,int nParent = View)
{
switch(Type)
{
case 0: DrawXCU(pDC,NodeNum,Rect,XCU_TEXTCENTER,XCU_NOLINE,XCU_MAIN,0,0,nParent);break;
case 1: DrawXCU(pDC,NodeNum,Rect,XCU_TEXTCENTER,XCU_NOLINE,XCU_TRACE,0,0,nParent);break;
case 2: DrawXCU(pDC,NodeNum,Rect,XCU_TEXTCENTER,XCU_NOLINE,XCU_INIT,0,0,nParent);break;
default:DrawHMI(pDC,NodeNum,Rect,1,0,0);break;
}
}标签:mfc draw
原文地址:http://embeded.blog.51cto.com/3989210/1570525