📄 draw.cpp
字号:
// Draw.cpp : implementation file
//
#include "stdafx.h"
#include "test_huabu.h"
#include "Draw.h"
#include "MemDC.h"
#include <stdlib.h>
#include <Winuser.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDraw
CDraw::CDraw()
{
ok_1=0;
ok_2=0;
can_or=FALSE;
test_1=FALSE;
}
CDraw::~CDraw()
{
}
BEGIN_MESSAGE_MAP(CDraw, CStatic)
//{{AFX_MSG_MAP(CDraw)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDraw message handlers
void CDraw::draw1(CDC *pDC, CRect &rect)
{
//------------背景色绘制------------------------------//
CBrush brushFill,*pBrushOld;
brushFill.DeleteObject();
brushFill.CreateSolidBrush(RGB(128,128,128));
pBrushOld = pDC->SelectObject(&brushFill);
pDC->Rectangle(rect);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
//--------------------绘制顶栏-----------------------------//
brushFill.CreateSolidBrush(RGB(255,255,1));
pBrushOld = pDC->SelectObject(&brushFill);
Header[0].x=rect.left;
Header[0].y=rect.top;
Header[1].x=rect.right/5;
Header[1].y=rect.bottom/11;
pDC->Rectangle(Header[0].x,Header[0].y,Header[1].x,Header[1].y);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
brushFill.CreateSolidBrush(RGB(1,128,1));
pBrushOld = pDC->SelectObject(&brushFill);
Header[0]=Header[1];
Header[1].x=rect.right;
Header[1].y=rect.top;
pDC->Rectangle(Header[0].x,Header[0].y,Header[1].x,Header[1].y);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
pDC->MoveTo(rect.right*2/5,rect.top);
pDC->LineTo(rect.right*2/5,rect.bottom/11);
pDC->MoveTo(rect.right*3/5,rect.top);
pDC->LineTo(rect.right*3/5,rect.bottom/11);
pDC->MoveTo(rect.right*4/5,rect.top);
pDC->LineTo(rect.right*4/5,rect.bottom/11);
//------------------顶楼框架设置完成,字在下面一起绘制-----------------------------//
//------------------蓝色主体绘制---------------------------------------//
//--------------------------------------右下圈及刻度------------------------------//
brushFill.CreateSolidBrush(RGB(1,1,128));
pBrushOld = pDC->SelectObject(&brushFill);
Header[0].x=rect.left;
Header[0].y=rect.bottom/11;
Header[1].x=rect.right;
Header[1].y=rect.bottom*(7.8)/11;
pDC->Rectangle(Header[0].x,Header[0].y,Header[1].x,Header[1].y);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
brushFill.CreateSolidBrush(RGB(1,128,1));
pBrushOld = pDC->SelectObject(&brushFill);
//''''''''''第一个仪表盘(右下角)''''''''''''''//
Cir_center1.x=rect.right*3/5+10; //仪表中心点
Cir_center1.y=rect.bottom*(7)/11;
for(int i=0;i<180;i++)
{
pt1[i].x=Cir_center1.x-(int)(rect.right/13+15)*cos(i*atan(1.0)/45); //*cos(atan(1.0));
pt1[i].y=Cir_center1.y-(int)(rect.right/13+15)*sin(i*atan(1.0)/45); //*sin(atan(1.0));
pt1[359-i].x=Cir_center1.x-(int)(rect.right/13)*cos(i*atan(1.0)/45); //*cos(atan(1.0));
pt1[359-i].y=Cir_center1.y-(int)(rect.right/13)*sin(i*atan(1.0)/45); //*sin(atan(1.0));
}
pDC->Polygon(pt1,360);
//''''''''''''第二个仪表盘(右上角)'''''''''''''''''''''''''''''''''//
Cir_center2.x=rect.right*3/5+10; //仪表中心点
Cir_center2.y=rect.bottom*(3.5)/11;
for( i=0;i<180;i++)
{
pt2[i].x=Cir_center2.x-(int)(rect.right/13+15)*cos(i*atan(1.0)/45); //*cos(atan(1.0));
pt2[i].y=Cir_center2.y-(int)(rect.right/13+15)*sin(i*atan(1.0)/45); //*sin(atan(1.0));
pt2[359-i].x=Cir_center2.x-(int)(rect.right/13)*cos(i*atan(1.0)/45); //*cos(atan(1.0));
pt2[359-i].y=Cir_center2.y-(int)(rect.right/13)*sin(i*atan(1.0)/45); //*sin(atan(1.0));
}
pDC->Polygon(pt2,360);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
brushFill.CreateSolidBrush(RGB(255,0,0)); //红色部分
pBrushOld = pDC->SelectObject(&brushFill);
for(i=0;i<45;i++)
{
pt2_1[i]=pt2[i];
pt2_1[i+45]=pt2[i+315];
}
pDC->Polygon(pt2_1,90);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
//'''''''''第三个仪表盘(最左)''''''''''''''''''''''''''''''''''//
brushFill.CreateSolidBrush(RGB(1,128,1));
pBrushOld = pDC->SelectObject(&brushFill);
Cir_center3.x=rect.right/4-15; //仪表中心点
Cir_center3.y=rect.bottom*(4)/11;
for( i=0;i<180;i++)
{
pt3[i].x=Cir_center3.x-(int)(rect.right/10+18)*cos(i*atan(1.0)/45); //*cos(atan(1.0));
pt3[i].y=Cir_center3.y-(int)(rect.right/10+18)*sin(i*atan(1.0)/45); //*sin(atan(1.0));
pt3[359-i].x=Cir_center3.x-(int)(rect.right/10)*cos(i*atan(1.0)/45); //*cos(atan(1.0));
pt3[359-i].y=Cir_center3.y-(int)(rect.right/10)*sin(i*atan(1.0)/45); //*sin(atan(1.0));
}
pDC->Polygon(pt3,360);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
brushFill.CreateSolidBrush(RGB(192,192,192)); //灰色部分
pBrushOld = pDC->SelectObject(&brushFill);
for(i=0;i<90;i++)
{
pt3_1[i]=pt3[i];
pt3_1[i+90]=pt3[i+270];
}
pDC->Polygon(pt3_1,180);
pDC->SelectObject(pBrushOld);
brushFill.DeleteObject();
pBrushOld->DeleteObject();
//------------------------------------------------刻度----------------------//
VERIFY(m_font.CreateFont(20, 0, 0, 0, 700,
FALSE, FALSE, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY,
DEFAULT_PITCH|FF_SWISS, _T("黑体")));
pFontOld = pDC->SelectObject(&m_font);
pDC->SetTextColor(RGB(255,255,255));
pDC->SetBkMode(TRANSPARENT);
//'''''''''''''第一个刻度'''''''''''''''''''''''''//
pDC->ExtTextOut(pt1[0].x-15, pt1[0].y-15, ETO_OPAQUE,NULL,_T("0"),NULL);
pDC->ExtTextOut(pt1[44].x-20, pt1[44].y-17, ETO_OPAQUE,NULL,_T("25"),NULL);
pDC->ExtTextOut(pt1[89].x-10, pt1[89].y-22, ETO_OPAQUE,NULL,_T("50"),NULL);
pDC->ExtTextOut(pt1[134].x+10, pt1[134].y-12, ETO_OPAQUE,NULL,_T("75"),NULL);
pDC->ExtTextOut(pt1[179].x+10, pt1[179].y-15, ETO_OPAQUE,NULL,_T("100"),NULL);
pDC->ExtTextOut(pt1[0].x, pt1[89].y-50, ETO_OPAQUE,NULL,_T("Actuator pos feedback"),NULL);
//''''''''''''''第二个刻度'''''''''''''''''''''''''''''''''''//
pDC->ExtTextOut(pt2[0].x-15, pt2[0].y-15, ETO_OPAQUE,NULL,_T("0"),NULL);
pDC->ExtTextOut(pt2[44].x-20, pt2[44].y-17, ETO_OPAQUE,NULL,_T("10"),NULL);
pDC->ExtTextOut(pt2[89].x-10, pt2[89].y-22, ETO_OPAQUE,NULL,_T("20"),NULL);
pDC->ExtTextOut(pt2[134].x+10, pt2[134].y-12, ETO_OPAQUE,NULL,_T("30"),NULL);
pDC->ExtTextOut(pt2[179].x+10, pt2[179].y-15, ETO_OPAQUE,NULL,_T("40"),NULL);
pDC->ExtTextOut(pt2[0].x, pt2[89].y-50, ETO_OPAQUE,NULL,_T("START AIR PRESSURE"),NULL);
//'''''''''''''第三个刻度''''''''''''''''''''''''''''''''''''''''//
pDC->ExtTextOut(pt3[0].x-38, pt3[0].y-15, ETO_OPAQUE,NULL,_T("-120"),NULL);
pDC->ExtTextOut(pt3[44].x-28, pt3[44].y-17, ETO_OPAQUE,NULL,_T("-60"),NULL);
pDC->ExtTextOut(pt3[89].x-10, pt3[89].y-22, ETO_OPAQUE,NULL,_T("0"),NULL);
pDC->ExtTextOut(pt3[134].x+10, pt3[134].y-12, ETO_OPAQUE,NULL,_T("60"),NULL);
pDC->ExtTextOut(pt3[179].x+10, pt3[179].y-15, ETO_OPAQUE,NULL,_T("120"),NULL);
//----------------------------写实时数据-------------------------------------//
//'''''''''第一个数据''''''''''''//
pDC->SetTextColor(RGB(255,255,1));
char str[4];
temp=ok_1*100/180;
_itoa( temp, str, 10 );
str[2]='%';
str[3]=NULL;
pDC->ExtTextOut(pt1[89].x-14, pt1[134].y+60, ETO_OPAQUE,NULL,str,NULL);
//''''''''''第二个数据'''''''''''''''''''''//
temp=ok_1*40/180;
_itoa( temp, str, 10 );
str[2]='b';
str[3]=NULL;
pDC->ExtTextOut(pt2[89].x-14, pt2[134].y+60, ETO_OPAQUE,NULL,str,NULL);
//'''''''''''第三个数据'''''''''''''''''''''''''''//
temp=ok_1*40/180;
_itoa( temp, str, 10 );
str[2]='R';
str[3]=NULL;
//字体的m_font将在后面画数据树时delete()
//---------------------------------针----------------------------//
CPen penNew,*penOld;
penNew.CreatePen(PS_SOLID, 1, RGB(255,255,1));
penOld=pDC->SelectObject(&penNew);
brushFill.CreateSolidBrush(RGB(255,255,1));
pBrushOld = pDC->SelectObject(&brushFill);
//-------------第一个指针--------------------------------//
CPoint point[8];
point[0].x=Cir_center1.x;
point[0].y=Cir_center1.y;
point[1].x=Cir_center1.x -(int)4*cos((ok_1+40)*atan(1.0)/45);
point[1].y=Cir_center1.y- (int)4*sin((ok_1+40)*atan(1.0)/45);
point[2].x=Cir_center1.x -(int)10*cos((ok_1+25)*atan(1.0)/45);
point[2].y=Cir_center1.y- (int)10*sin((ok_1+25)*atan(1.0)/45);
point[3].x=Cir_center1.x -(int)16*cos((ok_1+15)*atan(1.0)/45);
point[3].y=Cir_center1.y- (int)16*sin((ok_1+15)*atan(1.0)/45);
point[4]=pt1[ok_1];
point[5].x=Cir_center1.x -(int)16*cos((ok_1-15)*atan(1.0)/45);
point[5].y=Cir_center1.y- (int)16*sin((ok_1-15)*atan(1.0)/45);
point[6].x=Cir_center1.x -(int)10*cos((ok_1-25)*atan(1.0)/45);
point[6].y=Cir_center1.y- (int)10*sin((ok_1-25)*atan(1.0)/45);
point[7].x=Cir_center1.x -(int)4*cos((ok_1-40)*atan(1.0)/45);
point[7].y=Cir_center1.y- (int)4*sin((ok_1-40)*atan(1.0)/45);
pDC->Polygon(point,8);
//''''''''''''''''''''''第二个指针''''''''''''''''''''''''''''''//
point[0].x=Cir_center2.x;
point[0].y=Cir_center2.y;
point[1].x=Cir_center2.x -(int)4*cos((ok_1+40)*atan(1.0)/45);
point[1].y=Cir_center2.y- (int)4*sin((ok_1+40)*atan(1.0)/45);
point[2].x=Cir_center2.x -(int)10*cos((ok_1+25)*atan(1.0)/45);
point[2].y=Cir_center2.y- (int)10*sin((ok_1+25)*atan(1.0)/45);
point[3].x=Cir_center2.x -(int)16*cos((ok_1+15)*atan(1.0)/45);
point[3].y=Cir_center2.y- (int)16*sin((ok_1+15)*atan(1.0)/45);
point[4]=pt2[ok_1];
point[5].x=Cir_center2.x -(int)16*cos((ok_1-15)*atan(1.0)/45);
point[5].y=Cir_center2.y- (int)16*sin((ok_1-15)*atan(1.0)/45);
point[6].x=Cir_center2.x -(int)10*cos((ok_1-25)*atan(1.0)/45);
point[6].y=Cir_center2.y- (int)10*sin((ok_1-25)*atan(1.0)/45);
point[7].x=Cir_center2.x -(int)4*cos((ok_1-40)*atan(1.0)/45);
point[7].y=Cir_center2.y- (int)4*sin((ok_1-40)*atan(1.0)/45);
pDC->Polygon(point,8);
//''''''''''''''''''''''''第三个指针''''''''''''''''''''''''''''''''''//
point[0].x=Cir_center3.x;
point[0].y=Cir_center3.y;
point[1].x=Cir_center3.x -(int)4*cos((ok_1+40)*atan(1.0)/45);
point[1].y=Cir_center3.y- (int)4*sin((ok_1+40)*atan(1.0)/45);
point[2].x=Cir_center3.x -(int)10*cos((ok_1+25)*atan(1.0)/45);
point[2].y=Cir_center3.y- (int)10*sin((ok_1+25)*atan(1.0)/45);
point[3].x=Cir_center3.x -(int)16*cos((ok_1+15)*atan(1.0)/45);
point[3].y=Cir_center3.y- (int)16*sin((ok_1+15)*atan(1.0)/45);
point[4]=pt3[ok_1];
point[5].x=Cir_center3.x -(int)16*cos((ok_1-15)*atan(1.0)/45);
point[5].y=Cir_center3.y- (int)16*sin((ok_1-15)*atan(1.0)/45);
point[6].x=Cir_center3.x -(int)10*cos((ok_1-25)*atan(1.0)/45);
point[6].y=Cir_center3.y- (int)10*sin((ok_1-25)*atan(1.0)/45);
point[7].x=Cir_center3.x -(int)4*cos((ok_1-40)*atan(1.0)/45);
point[7].y=Cir_center3.y- (int)4*sin((ok_1-40)*atan(1.0)/45);
pDC->Polygon(point,8);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -