picture.cpp

来源:互联网 发布:淘宝卖家客服在哪里找 编辑:程序博客网 时间:2024/06/06 07:27

// Picture.cpp : implementation file
//

#include "stdafx.h"
#include "MyApp.h"
#include "Picture.h"

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

/////////////////////////////////////////////////////////////////////////////
// Picture dialog
int paint_data[1000];  //保存数据
int counter_paint;     //计数
int value_max;
int value_min;

Picture::Picture(CWnd* pParent /*=NULL*/)
 : CDialog(Picture::IDD, pParent)
{
 //{{AFX_DATA_INIT(Picture)
 m_id = 0;
 m_num = 1;
 m_value = 1;
 //}}AFX_DATA_INIT
}


void Picture::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 //{{AFX_DATA_MAP(Picture)
 DDX_Text(pDX, IDC_EDIT_ID, m_id);
 DDX_Text(pDX, IDC_EDIT_NUM, m_num);
 DDV_MinMaxInt(pDX, m_num, 1, 1000);
 DDX_Text(pDX, IDC_EDIT_VALUE, m_value);
 DDV_MinMaxInt(pDX, m_value, 1, 5);
 //}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(Picture, CDialog)
 //{{AFX_MSG_MAP(Picture)
 ON_WM_PAINT()
 ON_BN_CLICKED(ID_PAINT_PIC, OnPaintPic)
 //}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Picture message handlers

void Picture::OnPaint()
{
 CPaintDC dc(this);
 int i;
 // TODO: Add your message handler code here
 CString zuobiao_str;

 zuobiao_str.Format("节点%d的记录找到%d条",m_id,counter_paint);
 GetDlgItem(IDC_STATIC_SET)->SetWindowText(zuobiao_str);
 
 dc.Rectangle(35,30,630,375);
     //画坐标轴
 CPen* pPenBlack = new CPen;                                //创建画笔对象
     pPenBlack->CreatePen(PS_SOLID, 1, RGB(0,0,0));
     dc.SelectObject(pPenBlack);

    dc.MoveTo(80,40);
 dc.LineTo(80,350);
 dc.LineTo(590,350);

 dc.MoveTo(75,50);    
 dc.LineTo(80,40);
 dc.LineTo(85,50);

    dc.MoveTo(580,345);
 dc.LineTo(590,350);
 dc.LineTo(580,355);

 zuobiao_str.Format("时间(*%d)",counter_paint/100+1);
 dc.TextOut(550,320,zuobiao_str);
   
 zuobiao_str.Format("数值(*%d)",value_max/100+1);
 dc.TextOut(90,40,zuobiao_str);

 dc.TextOut(65,350,"0");

    int nx = 10;
 int ny = 10;
 
    for(i=1;i<nx+1;i++)
 {
  zuobiao_str.Format("%d",i*10);
     dc.MoveTo(80+i*500/nx,345);
     dc.LineTo(80+i*500/nx,350);
  dc.TextOut(80+i*500/nx,355,zuobiao_str);
 }

 for(i =1;i<ny+1;i++)
 {
  zuobiao_str.Format("%d",i*10);
     dc.MoveTo(80,350-i*300/ny);
     dc.LineTo(85,350-i*300/ny);
  dc.TextOut(50,350-i*300/ny,zuobiao_str);
 }
   
  CPen* pPenRed = new CPen;                                //创建画笔对象
     pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0));
     dc.SelectObject(pPenRed);

    float datay1,datay2,datax1,datax2;
 for(i = counter_paint - 1;i > 0;i--)
 {
      datay1 = (float)paint_data[i]*3/(value_max/100+1);
   datay2 = (float)paint_data[i-1]*3/(value_max/100+1);
   datax1 = (float)(counter_paint-1-i)*5/(counter_paint/100+1);
   datax2 = (float)(counter_paint-i)*5/(counter_paint/100+1);
   dc.MoveTo(80+(int)datax1,350-(int)datay1);
   dc.LineTo(80+(int)datax2,350-(int)datay2);
 }

 zuobiao_str.Format("节点%d读数随时间变化的曲线",m_id);
 dc.TextOut(250,50,zuobiao_str);
 // Do not call CDialog::OnPaint() for painting messages
}


void Picture::OnPaintPic()
{
 // TODO: Add your control notification handler code here
 UpdateData();
 CString str;
 
 int i;
 int temp = 0;
 counter_paint = 0;
 value_max = 0;
    value_min = 0;
 while(pSet.IsOpen());
 pSet.Open();

 
 pSet.MoveLast();

 while(counter_paint <m_num)
 {
  if(counter_paint == 0 && pSet.IsBOF())
  {
   str.Format("没有节点%d数据!",m_id);
   GetDlgItem(IDC_STATIC_SET)->SetWindowText(str);
   break;
  }

  if(counter_paint < m_num && pSet.IsBOF())
   break;  
   
  if(pSet.m_ID == m_id)
  {
   if(m_value == 1)
    paint_data[counter_paint++] = pSet.m_VALUE1;
   if(m_value == 2)
    paint_data[counter_paint++] = pSet.m_VALUE2;
   if(m_value == 3)
    paint_data[counter_paint++] = pSet.m_VALUE3;
   if(m_value == 4)
    paint_data[counter_paint++] = pSet.m_VALUE4;
   if(m_value == 5)
    paint_data[counter_paint++] = pSet.m_VALUE5;
  } 
  
  pSet.MovePrev();
 }

 pSet.Close();
 if(counter_paint != 0)
  value_max = value_min = paint_data[0];
 
 for(i = 1;i < counter_paint;i++)
 {
  if(paint_data[i] > value_max)
   value_max = paint_data[i];
  if(paint_data[i] < value_min)
   value_min = paint_data[i];

 }
    GetDlgItem(IDC_STATIC_SET)->SetWindowText("请刷新视图……"); 
}