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

📄 draw.cpp

📁 原创的在windowsCE下的界面程序。仿照Kangsberg自动化软件的界面仿制。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -