DataShow.cpp
上传用户:shdibao
上传日期:2022-07-20
资源大小:3385k
文件大小:42k
- // DataShow.cpp : implementation file
- //
- /************************************************************************/
- /* 数据显示类:
- 作者:南京航空航天大学能源与动力学院 庄三少
- 2009年1月11日
- Email:viualsan@yahoo.cn
- tel:13512524413
- 友情发布:http://www.codefans.net
- 说明:
- 本类无任何限制,可自由改动传播。只需附上该段说明。 */
- /************************************************************************/
- #include "stdafx.h"
- #include "DataShow.h"
- #include <math.h>
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CDataShow
- CDataShow::CDataShow()
- {
- m_IsTimeShow=true;
- m_time_color=RGB(255,0,255);
- m_IsNoteOn=true;
- m_sNote_text="南京航空航天大学创建于 1952 年 10 月,座落于六朝古都南京。目前有两校区.";
- m_IsEnlargeClose=false;
- m_IsSelect_enlarge=false;
- m_IsEnlarge=false;
- m_IsMove=false;
- m_captureNum=0;
- m_IsCaptureSaveBMP=3;
- m_IsCaptureSaveBMP=false;
- m_numofData=0;
- m_numOfBMP=0;
- m_lineStyle=0;
- m_lineWide=0;
-
- m_color_note=RGB(0,200,180);
- title_color=RGB(0,250,230);
- text_color=RGB(255,255,255);
- m_cross_color=RGB(0,255,255);
- m_selectRect_color=RGB(250,0,0);
- m_pMousePoint.x=0;
- m_pMousePoint.y=0;
- m_dNumOfData=0;
- m_selectRect_color=RGB(122,30,200);
- //初始化主框画笔
- m_pdc_framRect.new_brush.CreateSolidBrush(RGB(0,100,100));
- m_pdc_framRect.new_pen.CreatePen(0,0,RGB(255,255,0));
- //初始化数据框画笔
- m_pdc_data.new_brush.CreateSolidBrush(RGB(0,100,100));
- m_pdc_data.new_pen.CreatePen(0,0,RGB(255,255,0));
- m_datacolor=RGB(255,255,0);
- //参数化数据框画笔
- m_pdc_childRect.new_brush.CreateSolidBrush(RGB(0,0,0));
- m_pdc_childRect.new_pen.CreatePen(0,0,RGB(255,255,0));
- m_pdc_childRect.c=RGB(0,0,0);
- //参数化轴画笔
- m_pdc_axis.new_brush.CreateSolidBrush(RGB(0,100,100));
- m_pdc_axis.new_pen.CreatePen(0,0,RGB(255,255,0));
- //初始化网格画笔
- m_pdc_grid.new_pen.CreatePen(2,0,RGB(0,255,255));
- m_High=500;
- m_Low=0;
- m_Top=500;
- m_Bottom=0;
- ///////////////////
- double dx=m_High/200.0;
- for (int i=0;i<200;i++)
- {
- m_Data_x[i]=dx*i;
- m_Data_y[i]=sin(m_Data_x[i]/30)*150;
- m_dNumOfData++;
- }
- m_start_POINT.x=m_Data_x[0];
- m_start_POINT.y=m_Data_y[0];
- m_end_point.x=m_Data_x[m_dNumOfData-1];
- m_end_point.y=m_Data_y[m_dNumOfData-1];
- m_IsCrossMove=true;
- m_sTitle_str="visualsan@yahoo.cn TEL:13512524413 南京航空航天大学——庄三少";
- m_sAxis_xstr="时间轴";
- m_sAxis_ystr="数据轴";
- m_dNum=(m_High - m_Low)/10;
- m_dnum_top_bottom=(m_Top - m_Bottom)/10;
- m_bIsGridOn=false;
- m_GridControl=5;
- m_x_start=-100;
- m_y_start=-100;
- m_x_end=500;
- m_y_end=500;
- m_xFactor=(m_x_end-m_x_start)/double(m_High-m_Low);
- m_yFactor=(m_y_end-m_y_start)/double(m_Top-m_Bottom);
- m_pdc_data.c=m_pdc_childRect.c;
- m_pdc_data.new_brush.DeleteObject();
- m_pdc_data.new_brush.CreateSolidBrush(RGB(0,0,0));
- for (int i=0;i<20;i++)
- {
- m_Text[i]="love";
- }
-
-
- }
- CDataShow::~CDataShow()
- {
- }
- BEGIN_MESSAGE_MAP(CDataShow, CStatic)
- //{{AFX_MSG_MAP(CDataShow)
- ON_WM_TIMER()
- ON_WM_MOUSEMOVE()
- ON_WM_PAINT()
- ON_WM_CREATE()
- ON_WM_ERASEBKGND()
- ON_WM_LBUTTONDOWN()
- ON_WM_LBUTTONUP()
- ON_WM_RBUTTONDOWN()
- ON_WM_RBUTTONUP()
- ON_WM_MBUTTONDOWN()
- ON_WM_MBUTTONUP()
- ON_WM_LBUTTONDBLCLK()
- ON_WM_RBUTTONDBLCLK()
- ON_COMMAND(IDC_SAVE_BMP, OnSaveBmp)
- ON_COMMAND(IDC_SAVE_DATA, OnSaveData)
- ON_COMMAND(IDC_SET_DATA_COLOR,OnSetDataColor)
- ON_COMMAND(IDC_SET_AXIS_COLOR,OnSetAxisColor)
- ON_COMMAND(IDC_SET_XYLEBAL_COLOR,OnSetXYlebalColor)
- ON_COMMAND(IDC_SET_GRID_COLOR,OnSetGridColor)
- ON_COMMAND(IDC_SET_BK_COLOR,OnSetBKColor)
- ON_COMMAND(IDC_SET_TITLE_COLOR,OnSetTitleColor)
- ON_COMMAND(IDC_SET_CROSSLINE_COLOR,OnSetCrossLineColor)
- ON_COMMAND(IDC_SET_FACE_COLOR,OnSetFaceColor)
- ON_COMMAND(IDC_DATA_INPUT,OnSetDataInput)
- ON_COMMAND(IDC_SET_GRID_ON_OFF,OnSetGridOnOff)
- ON_COMMAND(IDC_SET_NOTE_ON_OFF,OnSetNoteOnOff)
- ON_COMMAND(IDC_SET_NOTE_COLOR,OnSetNoteColor)
- ON_COMMAND(IDB_SET_TIME_SHOW,OnSetTimeShow)
- ON_COMMAND(IDB_SET_TIME_TEXT_COLOR,OnSetTimeColor)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CDataShow message handlers
- void CDataShow::OnTimer(UINT nIDEvent)
- {
- // TODO: Add your message handler code here and/or call default
- if (nIDEvent==0)
- {
- Invalidate();
- }
- if (nIDEvent==1)
- {
- SaveBmpWithTheOfTime();
- if (m_numOfBMP>1000)
- {
- m_numOfBMP=0;
- }
- }
- if (nIDEvent==2)
- {
- SaveDateAuto();
- if (m_numofData>1000)
- {
- m_numofData=0;
- }
- }
- /*if ((m_IsCaptureSaveBMP)&&m_captureNum<=m_max_CapturePictre
- )
- {
- CTime st=GetCurrentTime();
- CString filename,str;
- str.Format("H=%d Min=%d Sec=%d",st.GetHour(),st.GetMinute(),st.GetSecond());
- filename.Format("Num%d",m_numOfBMP++);
- filename=filename+",Time "+str+".bmp";
- CaptureSaveBMP(filename);
- m_captureNum++;
- }*/
-
- CStatic::OnTimer(nIDEvent);
- }
- void CDataShow::OnSetDataColor()
- {
- SetColor("data");
- }
- void CDataShow::OnSetTimeColor()
- {
- SetColor("time");
- }
- void CDataShow::OnMouseMove(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- if(m_IsSelect_enlarge&&!m_IsEnlargeClose)
- {
- if (!IsDataOut(point.x,point.y))//保证选择框不超出数据框范围
- {
- m_Select_Enlarge_p2=point;
- }
-
- }
- SetTimer(0,10,NULL);
- SetDataRect();
- Move(point);
- Enlarge(point);
- if (m_dataRect.left<point.x&&point.x<m_dataRect.right
- &&point.y>m_dataRect.top&&point.y<m_dataRect.bottom)
- {
-
- if (m_IsCrossMove)
- {
- if (GetNearPoint()!=-1&&GetNearPoint()!=m_dNumOfData)
- {
- SetNearMousePoint();
- }
- else{
-
-
- m_pMousePoint.x=point.x;
- m_pMousePoint.y=point.y;
- }
- }
-
- }
- Move(point);
-
-
- CStatic::OnMouseMove(nFlags, point);
- }
- void CDataShow::OnPaint()
- {
- CPaintDC dc(this); // device context for painting
- m_High=(m_dataRect.right-m_dataRect.left);
- m_Low=0;
- m_Top=(-m_dataRect.top+m_dataRect.bottom-2*h);
- m_Bottom=0;
- m_dNum=(m_High - m_Low)/10;
- m_dnum_top_bottom=(m_Top - m_Bottom)/10;
- //CDC *pDC;
- //pDC=GetDC();
-
- GetClientRect(m_frameRect);
- CBitmap bitmap;
- bitmap.CreateCompatibleBitmap(&dc, m_frameRect.Width(), m_frameRect.Height());//生成空间的内存位图
- CDC me;
- me.CreateCompatibleDC(NULL);//生成内存cd
- me.SelectObject(&bitmap);
-
- me.SetBkMode(TRANSPARENT);//设置透明字体
- me.SetTextColor(RGB(255,0,0));
- ////////////////////////添加绘图函数
-
- // EnlargeSelectLarge();
- SetAxisChange();
- Draw_frameRect(&me);
- Draw_childRect(&me);
- Draw_SelectArea(&me);
- Draw_MousePoint(&me);
- Draw_Title(&me);
- Draw_Axis(&me);
- Draw_Axis_xyLebal(&me);
- Draw_Data(&me);
- Draw_CrossLine(&me);
- Draw_Grid(&me);
- Draw_SelectRect(&me);
- Draw_NoteWord(&me);
- // TextControl(&me);
-
-
-
- ///////////////////////////////////////////////////////////////////////////
- me.SetROP2(R2_WHITE);
- dc.BitBlt(0, 0, m_frameRect.Width(), m_frameRect.Height(), &me, 0, 0, SRCCOPY);//拷备
- bitmap.DeleteObject();
- me.DeleteDC();
-
- // pDC->DeleteDC();
-
- // Do not call CStatic::OnPaint() for painting messages
- }
- int CDataShow::OnCreate(LPCREATESTRUCT lpCreateStruct)
- {
- if (CStatic::OnCreate(lpCreateStruct) == -1)
- return -1;
-
- // TODO: Add your specialized creation code here
- GetClientRect(m_frameRect);
-
-
- return 0;
- }
- BOOL CDataShow::OnEraseBkgnd(CDC* pDC)
- {
- // TODO: Add your message handler code here and/or call default
-
- return FALSE;
- }
- void CDataShow::Draw_frameRect(CDC *dc)
- {
-
- GetClientRect(m_frameRect);
- dc->FillRect(m_frameRect,&m_pdc_framRect.new_brush);
-
- }
- //DEL void pdc::SetOldObject()
- //DEL {
- //DEL pDC->SelectObject(old_brush);
- //DEL pDC->SelectObject(old_pen);
- //DEL
- //DEL }
- //DEL void pdc::SetNewObject()
- //DEL {
- //DEL old_pen=pDC->SelectObject(&new_pen);
- //DEL old_brush=pDC->SelectObject(&new_brush);
- //DEL
- //DEL }
- //DEL pdc::~pdc()
- //DEL {
- //DEL SetOldObject();
- //DEL }
- //DEL pdc::pdc()
- //DEL {
- //DEL
- //DEL
- //DEL }
- void CDataShow::Draw_childRect(CDC *dc)
- {
- GetClientRect(m_frameRect);
- SetDataRect();
- // SetChildRectColor(RGB(0,0,0));
- dc->FillRect(m_dataRect,&m_pdc_childRect.new_brush);
- }
- void CDataShow::SetDataRect()
- {
-
- w=m_frameRect.Width()/10.0;
- h=m_frameRect.Height()/10.0;
- if (w>20)
- {
- w=20;
- }
- if (h>10)
- {
- h=10;
- }
- if (w<10)
- {
- w=10;
- }
- if (h<5)
- {
- h=5;
- }
- m_dataRect.left=m_frameRect.left+w*3;
- m_dataRect.right=m_frameRect.right-w;
- m_dataRect.top=m_frameRect.top+h;
- m_dataRect.bottom=m_frameRect.bottom-h;
- }
- void CDataShow::SetFrameColor(COLORREF C)
- {
- m_pdc_framRect.new_brush.DeleteObject();
- m_pdc_framRect.new_brush.CreateSolidBrush(C);
- }
- void CDataShow::SetChildRectColor(COLORREF C)
- {
- m_pdc_childRect.new_brush.DeleteObject();
- m_pdc_childRect.new_brush.CreateSolidBrush(C);
- m_pdc_childRect.c=C;
- m_pdc_data.new_brush.DeleteObject();
- m_pdc_data.new_brush.CreateSolidBrush(C);
- }
- void CDataShow::Draw_MousePoint(CDC *pdc)
- {
- CString str;
- str.Format("x=%.1f",double((m_pMousePoint.x-m_pOrth.x)*m_xFactor+m_x_start));
- pdc->TextOut(m_frameRect.left+5,m_frameRect.bottom-30,str);
- str.Format("y=%.1f",double((-m_pMousePoint.y+m_pOrth.y)*m_yFactor+m_y_start));
- pdc->TextOut(m_frameRect.left+5,m_frameRect.bottom-50,str);
-
- if (m_IsTimeShow)
- {
- pdc->SetTextColor(m_time_color);
- pdc->TextOut(m_dataRect.right-120,m_pOrth.y-30,GetTimeFormat());
- }
-
- }
- void CDataShow::Draw_Title(CDC *pdc)
- {
- CPen p;
- p.CreatePen(0,0,title_color);
- SetTitlePosition();
- pdc->SetTextColor(title_color);
- pdc->TextOut(m_pTextPosition.x,m_pTextPosition.y,m_sTitle_str);
- p.DeleteObject();
- }
- void CDataShow::SetTitlePosition()
- {
- SetDataRect();
- /* CPaintDC dc(this);
- TEXTMETRIC tm;
- dc.GetTextMetrics(&tm);
- int text_height_ ,text_width_,l;
- l=m_sTitle_str.GetLength();
- text_height_ = tm.tmHeight + tm.tmExternalLeading; // Height of font
- text_width_ = tm.tmMaxCharWidth; // width of widest char in font
- if (l<100)
- {
- for (int i=0;i<=l*text_width_/m_dataRect.Width();i++)
- {*/
- m_pTextPosition.x=(m_dataRect.left+m_dataRect.right)/2-4*m_sTitle_str.GetLength();//((text_width_*m_sTitle_str.GetLength())/(l*text_width_/m_dataRect.Width()+1))/2*text_width_;
- m_pTextPosition.y=m_dataRect.top+h;//+text_height_*i;
- /* }
- }
- else
- {
-
- }*/
- }
- void CDataShow::Draw_Axis(CDC*pDC)
- {
-
- pDC->SetTextColor(text_color);
- pDC->SelectObject(&m_pdc_axis.new_pen);
- CRect rect;
- SetDataRect();
- rect=m_dataRect;
- CString str;
- int i;
- int m_left,m_top,m_right,m_bottom;
-
- int m_Interval = (m_High - m_Low)/10;
- m_dNum=m_Interval;
- if (m_Interval < 1) m_Interval = 1;
-
- m_left = rect.left+20;
- m_top = rect.top+10;
- m_right = rect.right-10;
- m_bottom = rect.bottom-40;
-
-
-
- int m_IntervalPan = (m_right - m_left)/10;
- if (m_IntervalPan < 1 ) m_IntervalPan =1;
-
-
-
- // 选中当前红色画笔,并保存以前的画笔
- // CGdiObject* pOldPen = pDC->SelectObject(pPenRed);
-
- // 绘制坐标轴
- pDC->MoveTo(m_left,m_top);
-
- // 垂直轴
- pDC->LineTo(m_left,m_bottom);
-
- // 水平轴
- pDC->LineTo(m_right,m_bottom);
-
- m_pOrth.x=m_left;
- m_pOrth.y=m_bottom;
- // 写X轴刻度值
- for(i=0;i<10;i++)
- {
- //str.Format(_T("%d"),m_Min+i*m_Interval);
- str.Format(_T("%.1f"),GetAxisPosition(i,"x"));
- pDC->TextOut(m_left+double(i*m_IntervalPan),m_bottom+3,str);
- }
- //str.Format(_T("%d"),m_Max);
- str.Format(_T("%.1f"),m_x_end);
- pDC->TextOut(m_left+10*m_IntervalPan,m_bottom+3,str);
- //////////////////////////////////////////////////////////////////
- m_Interval = (m_High - m_Low)/10;
-
- // 绘制X轴刻度
- for (i = 0; i < 20; i ++)
- {
- if ((i%2) == 0)
- {
- // 10的倍数
- pDC->MoveTo(i*m_Interval/2 + m_pOrth.x, m_bottom);
- pDC->LineTo(i*m_Interval/2 + m_pOrth.x, m_bottom+8);
- }
- else
- {
- // 10的倍数
- pDC->MoveTo(i*m_Interval/2 +m_pOrth.x, m_bottom);
- pDC->LineTo(i*m_Interval/2 + m_pOrth.x, m_bottom+3);
- }
- }
-
- // 绘制Y轴箭头
- pDC->MoveTo(m_right-5,m_bottom-5);
- pDC->LineTo(m_right,m_bottom);
- pDC->LineTo(m_right-5,m_bottom+5);
-
- // 绘制X轴箭头
- pDC->MoveTo(m_left-5,m_top+5);
- pDC->LineTo(m_left,m_top);
- pDC->LineTo(m_left+5,m_top+5);
-
-
- // 绘制Y轴网格 选择绿色画笔
- // pDC->SelectObject(pPenGreen);
- //
- //////////////////////////////////////////////////////////////////
- //数组赋值
- m_Interval=(-m_Bottom+m_Top)/10;
- m_dnum_top_bottom=m_Interval;
- CFont* pFont = pDC->GetCurrentFont();
- LOGFONT logFont ;
- pFont->GetLogFont(&logFont);
- logFont.lfEscapement = 900 ;//900/10 = 90
- HFONT hFont=CreateFontIndirect(&logFont);
- pDC->SelectObject(hFont);
- // 写y轴刻度值
- for(i=0;i<10;i++)
- {
- //str.Format(_T("%d"),m_Min+i*m_Interval);
- str.Format(_T("%.1f"),GetAxisPosition(i,"y"));
- pDC->TextOut(m_pOrth.x-20,m_bottom-(i)*m_Interval+10,str);
- }
-
-
- // 绘制y轴刻度
- for (i=0;i<20;i++)
- {
- if (i%2 == 0)
- {
- // 10的倍数
- pDC->MoveTo(m_pOrth.x, m_Bottom+i*m_Interval/2);
- pDC->LineTo(m_pOrth.x-8, m_Bottom+i*m_Interval/2);
- }
- else
- {
-
- pDC->MoveTo(m_pOrth.x, m_Bottom+i*m_Interval/2);
- pDC->LineTo(m_pOrth.x-5, m_Bottom+i*m_Interval/2);
- }
- }
- DeleteObject(hFont);
- pDC->SelectObject(pFont);
- pFont->DeleteObject();
-
- }
- void CDataShow::SetAxisColor(COLORREF C)
- {
- m_pdc_axis.new_pen.DeleteObject();
- m_pdc_axis.new_pen.CreatePen(0,0,C);
- }
- void CDataShow::SetXYLebalColor(COLORREF C)
- {
- m_axis_xyLebal.new_pen.DeleteObject();
- m_axis_xyLebal.new_pen.CreatePen(0,0,C);
- }
- void CDataShow::Draw_Axis_xyLebal(CDC *pdc)
- {
- SetDataRect();
- CFont* pFont = pdc->GetCurrentFont();
- LOGFONT logFont ;
- pFont->GetLogFont(&logFont);
- logFont.lfEscapement = 900 ;//900/10 = 90
- HFONT hFont=CreateFontIndirect(&logFont);
- ///////////////x轴文字输出
- pdc->TextOut((m_dataRect.left+m_dataRect.right)/2-4*m_sAxis_xstr.GetLength(),m_pOrth.y+h+20,m_sAxis_xstr);
- ////////////////////y轴文字输出
- pdc->SelectObject(hFont);
- pdc->TextOut(m_pOrth.x+5,(m_dataRect.bottom+m_dataRect.top)/2.5+4*m_sAxis_ystr.GetLength(),m_sAxis_ystr);
-
-
- DeleteObject(hFont);
- pdc->SelectObject(pFont);
- pFont->DeleteObject();
-
- // delete hFont;
- }
- void CDataShow::Draw_Data(CDC *pDC)
- {
- int a,b;
- pDC->SelectObject(&m_pdc_data.new_pen);
- pDC->SetTextColor(m_datacolor);
- pDC->SelectObject(&m_pdc_data.new_brush);
- if (m_lineStyle>=4)
- {
- m_pdc_data.new_pen.DeleteObject();
- m_pdc_data.new_pen.CreatePen(m_lineStyle-3,m_lineWide,m_datacolor);
- pDC->SelectObject(&m_pdc_data.new_pen);
- }
-
- bool bs=true;
- int m_i=0;
- while ((m_i<m_dNumOfData))
- {
-
- if (!IsDataOut(m_pOrth.x+m_Data_x[m_i],m_pOrth.y-m_Data_y[m_i]))
- {
- pDC->MoveTo(m_pOrth.x+m_Data_x[m_i],m_pOrth.y-m_Data_y[m_i]);
- break;
- }
- m_i++;
-
- }
-
- // pDC->MoveTo(m_pOrth.x+m_Data_x[0],m_pOrth.y-m_Data_y[0]);
- for (int i=m_i;i<m_dNumOfData;i++)
- {
- if(!IsDataOut(m_pOrth.x+m_Data_x[i],m_pOrth.y-m_Data_y[i]))
- {
- switch (m_lineStyle)
- {
-
- case 0:
- pDC->LineTo(m_pOrth.x+m_Data_x[i],m_pOrth.y-m_Data_y[i]);
- break;
- case 1:
- pDC->TextOut(m_pOrth.x+m_Data_x[i]-1,m_pOrth.y-m_Data_y[i]-1,"*");
- break;
-
- case 2:
-
-
- pDC->Ellipse(m_pOrth.x+m_Data_x[i]-2,m_pOrth.y-m_Data_y[i]-2
- ,m_pOrth.x+m_Data_x[i]+2,m_pOrth.y-m_Data_y[i]+2);
- //pDC->TextOut(m_pOrth.x+m_Data_x[i]-1,
- // m_pOrth.y-m_Data_y[i]-1,"0");
- break;
- case 3:
- pDC->Rectangle(m_pOrth.x+m_Data_x[i]-2,m_pOrth.y-m_Data_y[i]-2
- ,m_pOrth.x+m_Data_x[i]+2,m_pOrth.y-m_Data_y[i]+2);
- break;
- case 4:
- case 5:
- case 6:
- pDC->LineTo(m_pOrth.x+m_Data_x[i],m_pOrth.y-m_Data_y[i]);
- break;
-
- }
- //
-
-
- }
-
-
- //
- }
- }
- bool CDataShow::IsDataOut(double x,double y)
- {
- if (x>m_dataRect.right||x<m_dataRect.left||y<m_dataRect.top||y>m_dataRect.bottom)
- {
- return true;
- }
- return false;
- }
- void CDataShow::Draw_CrossLine(CDC *pDC)
- {
- CPen p;
- p.CreatePen(0,0,m_cross_color);
- pDC->SelectObject(&p);
- int x,y;
- x=m_pMousePoint.x;
- y=m_pMousePoint.y;
- CPoint w_s,w_e,h_s,h_e;
- w_s.x=m_pOrth.x;
- w_s.y=y;
- w_e.x=m_dataRect.right-w;
- w_e.y=y;
- h_s.x=x;
- h_s.y=m_pOrth.y;
- h_e.x=x;
- h_e.y=m_dataRect.top+h;
- pDC->MoveTo(w_s);
- pDC->LineTo(w_e);
- pDC->MoveTo(h_s);
- pDC->LineTo(h_e);
- p.DeleteObject();
- }
- double CDataShow::GetDistance(CPoint p, double x, double y)
- {
-
- return sqrtl((p.x-x)*(p.x-x)+(p.y-y)*(p.y-y));
- }
- int CDataShow::GetNearPoint()
- {
- for (int i=0;i<m_dNumOfData;i++)
- {
- double x,y;
- x=m_Data_x[i];
- y=m_Data_y[i];
- // x=(x-m_x_start)/m_xFactor;
- // y=(y-m_y_start)/m_yFactor;
- if (abs(GetDistance(m_pMousePoint,double(x+m_pOrth.x),double(-y+m_pOrth.y)))<5)
- {
- return i;
- }
-
- }
-
- return -1;
- }
- void CDataShow::SetNearMousePoint()
- {
- if (GetNearPoint()!=-1&&GetNearPoint()!=m_dNumOfData)
- {
- m_pMousePoint.x=double(m_Data_x[GetNearPoint()])+m_pOrth.x;
- m_pMousePoint.y=double(m_Data_y[GetNearPoint()])+m_pOrth.y;
- }
- CString s;
- s.Format("%d",GetNearPoint());
- //GetDC()->TextOut(0,0,s);
- }
- void CDataShow::OnLButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
-
- if (m_IsSelect_enlarge==false)
- {
-
- m_pMousePoint=point;
- m_IsCrossMove=true;
-
- }
- if (!IsDataOut(point.x,point.y))//保证选择框不超出数据框范围
- {
-
- m_Select_Enlarge_p1=point;
-
- }
- m_IsEnlargeClose=false;
-
- CStatic::OnLButtonDown(nFlags, point);
- }
- void CDataShow::OnLButtonUp(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- if (m_IsSelect_enlarge==false)
- {
-
- m_IsCrossMove=false;
- }
-
-
- m_IsEnlargeClose=true;
- CStatic::OnLButtonUp(nFlags, point);
- }
- void CDataShow::SetText(CString str, CString name)
- {
- if (name=="x")
- {
- m_sAxis_xstr=str;
- }
- else
- if (name=="y")
- {
- m_sAxis_ystr=str;
- }
- else
- {
- m_sTitle_str=str;
- }
- }
- bool CDataShow::SaveBmp()
- {
- //定义图形大小
- CFileDialog dlg(false,NULL,"数据",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
- "bmp文件(*.bmp)|*.bmp|",
- NULL);
- char title[]= {"保存数据文件"};
- dlg.m_ofn.lpstrTitle= title;
- if (dlg.DoModal()!= IDOK) return false;
- CString filename = dlg.GetFileName() + ".bmp";
- int iWidth = m_frameRect.Width();
- int iHeight = m_frameRect.Height();
- int iPixel = 16;
- //图形格式参数
- LPBITMAPINFO lpbmih = new BITMAPINFO;
- lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- lpbmih->bmiHeader.biWidth = iWidth;
- lpbmih->bmiHeader.biHeight = iHeight;
- lpbmih->bmiHeader.biPlanes = 1;
- lpbmih->bmiHeader.biBitCount = iPixel;
- lpbmih->bmiHeader.biCompression = BI_RGB;
- lpbmih->bmiHeader.biSizeImage = 0;
- lpbmih->bmiHeader.biXPelsPerMeter = 0;
- lpbmih->bmiHeader.biYPelsPerMeter = 0;
- lpbmih->bmiHeader.biClrUsed = 0;
- lpbmih->bmiHeader.biClrImportant = 0;
-
- //创建位图数据
- HDC hdc,hdcMem;
- HBITMAP hBitMap = NULL;
- CBitmap *pBitMap = NULL;
- CDC *pMemDC =NULL;
- BYTE *pBits;
-
- hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);
- hdcMem = CreateCompatibleDC(hdc);
- hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
- pBitMap = new CBitmap;
- pBitMap->Attach(hBitMap);
- //pMemDC = new CDC;
- pMemDC=new CDC;
- pMemDC->Attach(hdcMem);
- pMemDC->SelectObject(pBitMap);
- //
- CRect rc(0,0,iWidth,iHeight);
- //添加自绘图形
- pMemDC->SetBkMode(TRANSPARENT);//设置透明字体
- pMemDC->SetTextColor(RGB(255,0,0));
- Draw_frameRect(pMemDC);
- Draw_childRect(pMemDC);
- Draw_SelectArea(pMemDC);
- Draw_MousePoint(pMemDC);
- Draw_Title(pMemDC);
- Draw_Axis(pMemDC);
- Draw_Axis_xyLebal(pMemDC);
- Draw_Data(pMemDC);
- Draw_CrossLine(pMemDC);
- Draw_SelectRect(pMemDC);
- Draw_Grid(pMemDC);
- Draw_NoteWord(pMemDC);
-
-
- //保存到文件并创建位图结构
- BITMAPFILEHEADER bmfh;
- ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
- *((char *)&bmfh.bfType) = 'B';
- *(((char *)&bmfh.bfType) + 1) = 'M';
- bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
- bmfh.bfSize = bmfh.bfOffBits + (iWidth * iHeight) * iPixel / 8;
-
- TCHAR szBMPFileName[128];
- int iBMPBytes = iWidth * iHeight * iPixel / 8;
- strcpy(szBMPFileName,filename);
- CFile file;
- if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
- {
- file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
- file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
- file.Write(pBits,iBMPBytes);
- file.Close();
- }
-
- pMemDC->DeleteDC();
- delete pMemDC; pMemDC = NULL;
- delete pBitMap; pBitMap = NULL;
- delete lpbmih; lpbmih = NULL;
- return true;
- }
- void CDataShow::LoadData()
- {
-
- CFileDialog dlg(true,NULL,"数据",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
- "data文件(*.data)|*.data|",
- NULL);
- char title[]= {"打开数据文件"};
- dlg.m_ofn.lpstrTitle= title;
- if (dlg.DoModal()!= IDOK) return;
- CString filename = dlg.GetFileName() ;
- FILE *f;
- f=fopen(filename,"r");
- if (f==NULL)
- {
- AfxMessageBox("打开文件错误");
- return;
- }
- fscanf(f,"%d",&m_dNumOfData);
- for (int i=0;i<m_dNumOfData;i++)
- {
- fscanf(f,"%f",&m_Data_x[i]);
- fscanf(f,"%f",&m_Data_y[i]);
- }
- fclose(f);
- m_start_POINT.x=m_Data_x[0];
- m_start_POINT.y=m_Data_y[0];
- m_end_point.x=m_Data_x[m_dNumOfData-1];
- m_end_point.y=m_Data_y[m_dNumOfData-1];
- DataChange("in");
-
- }
- void CDataShow::SaveData()
- {
- DataChange("out");
- KillTimer(0);
- FILE *f;
- CFileDialog dlg(false,NULL,"数据",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
- "data文件(*.data)|*.data|",
- NULL);
- char title[]= {"保存数据文件"};
- dlg.m_ofn.lpstrTitle= title;
- if (dlg.DoModal()!= IDOK)
- {
- DataChange("in");
- return;
- }
- CString filename = dlg.GetFileName() + ".data";
- f=fopen(filename,"w");
- fprintf(f,"%dn",m_dNumOfData);
- for(int i=0;i<m_dNumOfData;i++)
- {
- fprintf(f,"%f %fn",m_Data_x[i],m_Data_y[i]);
-
- }
- fclose(f);
- DataChange("in");
- SetTimer(0,100,NULL);
- }
- void CDataShow::Grid(CString IsOn)
- {
- if (IsOn=="on"||IsOn=="oN"||IsOn=="On")
- {
- m_bIsGridOn=true;
-
- }
- else
- {
- m_bIsGridOn=false;
- }
- }
- void CDataShow::Draw_Grid(CDC *pDC)
- {
- if (m_bIsGridOn)
- {
- pDC->SelectObject(m_pdc_grid.new_pen);
- double x,y;
-
- for (int i=1;i<=m_dNum;i++)
- {
- if((i%m_GridControl)==0)
- {
- x=i*10+m_pOrth.x;
- y=m_pOrth.y;
- pDC->MoveTo(x,y);
- x=i*10+m_pOrth.x;
- y=m_dataRect.top+h;
- pDC->LineTo(x,y);
- }
- }
- for (int i=1;i<=m_dnum_top_bottom;i++)
- {
- if((i%m_GridControl)==0)
- {
- x=m_pOrth.x;
- y=m_pOrth.y-i*10;
- pDC->MoveTo(x,y);
- x=m_dataRect.right-w;
- pDC->LineTo(x,y);
-
- }
-
- }
- }
- }
- void CDataShow::SetGridDensity(int density)
- {
- if (density>0)
- m_GridControl=density;
- }
- void CDataShow::SetGridColor(COLORREF C)
- {
- m_pdc_grid.new_pen.DeleteObject();
- m_pdc_grid.new_pen.CreatePen(2,0,C);
- }
- void CDataShow::OnSetNoteOnOff()
- {
- if (m_IsNoteOn)
- {
- SetNoteWordOn(true);
- m_IsNoteOn=false;
- }
- else
- {
- SetNoteWordOn(false);
- m_IsNoteOn=true;
- }
-
-
- }
- void CDataShow::OnSetTimeShow()
- {
- if (m_IsTimeShow)
- {
- SetTimeShow(true);
- m_IsTimeShow=false;
- }
- else
- {
- SetTimeShow(false);
- m_IsTimeShow=true;
- }
- }
- void CDataShow::SetDataColor(COLORREF C)
- {
- m_pdc_data.new_pen.DeleteObject();
- m_pdc_data.new_pen.CreatePen(0,m_lineWide,C);
- m_pdc_data.c=C;
- m_pdc_data.new_brush.DeleteObject();
- m_pdc_data.new_brush.CreateSolidBrush(m_pdc_childRect.c);
- m_datacolor=C;
- }
- void CDataShow::SetTextColor(COLORREF C)
- {
- text_color=C;
- }
- void CDataShow::SetCrossColor(COLORREF C)
- {
- m_cross_color=C;
- }
- void CDataShow::SetTitleColor(COLORREF C)
- {
- title_color=C;
- }
- void CDataShow::SetData(double *x, double *y, int n)
- {
- if (n<=2000)
- {
- m_dNumOfData=n;
- for (int i=0;i<m_dNumOfData;i++)
- {
- m_Data_x[i]=x[i];
- m_Data_y[i]=y[i];
- }
- DataChange("in");
- }
- }
- void CDataShow::Init()
- {
- SetTimer(0,10,NULL);
- // Invalidate();
- }
- void CDataShow::SetAxisChange()
- {
-
- m_xFactor=double(m_x_end-m_x_start)/double(m_High-m_Low);
- m_yFactor=double(m_y_end-m_y_start)/double(m_Top-m_Bottom);
- }
- void CDataShow::Draw_SelectRect(CDC *pdc)
- {
- if (GetNearPoint()!=-1&&GetNearPoint()!=m_dNumOfData)
- {
- CPen p;
- CBrush b;
- b.CreateSolidBrush(m_selectRect_color);
- p.CreatePen(0,0,m_selectRect_color);
- pdc->SelectObject(&p);
- pdc->SelectObject(&b);
- pdc->Rectangle(m_pMousePoint.x-3,m_pMousePoint.y-3,m_pMousePoint.x+3,m_pMousePoint.y+3);
- p.DeleteObject();
- b.DeleteObject();
- m_IsCaptureSaveBMP=true;
-
- }
- else
- m_IsCaptureSaveBMP=false;
- }
- int CDataShow::SetDrawLineStyle(int style,int lineWide)
- {
- m_lineStyle=style;
- m_lineWide=lineWide;
- if ((style<0||style>=7))
- {
- m_lineStyle=0;
-
- }
- if ((lineWide<0||lineWide>20))
- {
- m_lineWide=0;
-
- }
- m_pdc_data.new_pen.DeleteObject();
- if (style>=4)
- {
- m_pdc_data.new_pen.CreatePen(m_lineStyle-3,m_lineWide,m_datacolor);
- }
- else
- m_pdc_data.new_pen.CreatePen(0,m_lineWide,m_datacolor);
-
- return style;
- }
- void CDataShow::SaveBmp(double second,bool stop)
- {
- if (stop==true)
- {
- KillTimer(1);
-
- }
- else
- {
- SetTimer(1,second*1000,NULL);
- }
- SaveBmpWithTheOfTime();
- }
- void CDataShow::SaveBmpWithTheOfTime()
- {
- KillTimer(0);
- CTime st=CTime::GetCurrentTime();
- CString filename,str;
- str.Format("H=%d Min=%d Sec=%d",st.GetHour(),st.GetMinute(),st.GetSecond());
- filename.Format("Num%d",m_numOfBMP++);
- filename=filename+",Time "+str+".bmp";
- int iWidth = m_frameRect.Width();
- int iHeight = m_frameRect.Height();
- int iPixel = 16;
- //图形格式参数
- LPBITMAPINFO lpbmih = new BITMAPINFO;
- lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- lpbmih->bmiHeader.biWidth = iWidth;
- lpbmih->bmiHeader.biHeight = iHeight;
- lpbmih->bmiHeader.biPlanes = 1;
- lpbmih->bmiHeader.biBitCount = iPixel;
- lpbmih->bmiHeader.biCompression = BI_RGB;
- lpbmih->bmiHeader.biSizeImage = 0;
- lpbmih->bmiHeader.biXPelsPerMeter = 0;
- lpbmih->bmiHeader.biYPelsPerMeter = 0;
- lpbmih->bmiHeader.biClrUsed = 0;
- lpbmih->bmiHeader.biClrImportant = 0;
-
- //创建位图数据
- HDC hdc,hdcMem;
- HBITMAP hBitMap = NULL;
- CBitmap *pBitMap = NULL;
- CDC *pMemDC =NULL;
- BYTE *pBits;
-
- hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);
- hdcMem = CreateCompatibleDC(hdc);
- hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
- pBitMap = new CBitmap;
- pBitMap->Attach(hBitMap);
- //pMemDC = new CDC;
- pMemDC=new CDC;
- pMemDC->Attach(hdcMem);
- pMemDC->SelectObject(pBitMap);
- //
- CRect rc(0,0,iWidth,iHeight);
- //添加自绘图形
- pMemDC->SetBkMode(TRANSPARENT);//设置透明字体
- pMemDC->SetTextColor(RGB(255,0,0));
-
-
- Draw_frameRect(pMemDC);
- Draw_childRect(pMemDC);
- Draw_SelectArea(pMemDC);
- Draw_MousePoint(pMemDC);
- Draw_Title(pMemDC);
- Draw_Axis(pMemDC);
- Draw_Axis_xyLebal(pMemDC);
- Draw_Data(pMemDC);
- Draw_CrossLine(pMemDC);
- Draw_SelectRect(pMemDC);
- Draw_Grid(pMemDC);
- Draw_NoteWord(pMemDC);
-
-
- //保存到文件并创建位图结构
- BITMAPFILEHEADER bmfh;
- ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
- *((char *)&bmfh.bfType) = 'B';
- *(((char *)&bmfh.bfType) + 1) = 'M';
- bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
- bmfh.bfSize = bmfh.bfOffBits + (iWidth * iHeight) * iPixel / 8;
-
- TCHAR szBMPFileName[128];
- int iBMPBytes = iWidth * iHeight * iPixel / 8;
- strcpy(szBMPFileName,filename);
- CFile file;
- if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
- {
- file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
- file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
- file.Write(pBits,iBMPBytes);
- file.Close();
- }
-
- pMemDC->DeleteDC();
- delete pMemDC; pMemDC = NULL;
- delete pBitMap; pBitMap = NULL;
- delete lpbmih; lpbmih = NULL;
- Sleep(200);
- SetTimer(0,100,NULL);
- }
- void CDataShow::SaveData(double second, bool stop)
- {
- if (stop==true)
- {
- KillTimer(2);
- }
- else
- {
- if (second<=0)
- {
- second=0;
- }
- SetTimer(2,second*1000,NULL);
- }
- }
- void CDataShow::SaveDateAuto()
- {
- KillTimer(0);
- DataChange("out");
- FILE *f;
- CTime st=GetCurrentTime();
- CString filename,str;
- str.Format("H=%d Min=%d Sec=%d",st.GetHour(),st.GetMinute(),st.GetSecond());
- filename.Format("Num%d",m_numofData++);
- filename=filename+",Time "+str+".data";
- f=fopen(filename,"w");
- if (f==NULL)
- {
- AfxMessageBox("文件保存失败!");
- DataChange("in");
- return;
- }
- fprintf(f,"%dn",m_dNumOfData);
- for(int i=0;i<m_dNumOfData;i++)
- {
- fprintf(f,"%f %fn",m_Data_x[i],m_Data_y[i]);
-
- }
- fclose(f);
- DataChange("in");
- Sleep(200);
- SetTimer(0,100,NULL);
- }
- double CDataShow::GetAxisPosition(int n, CString name)
- {
- if (name=="x")
- {
- double dx;
- dx=(m_x_end-m_x_start)/10;
- return m_x_start+dx*n;
- }
- else
- {
- double dy;
- dy=(m_y_end-m_y_start)/10;
- return m_y_start+dy*n;
- }
- }
- void CDataShow::SetAxisRange(double start, double ed, CString name)
- {
- DataChange("out");
- if (name=="x")
- {
- m_x_start=start;
- m_x_end=ed;
- }
- else
- {
- m_y_start=start;
- m_y_end=ed;
- }
- SetAxisChange();
- DataChange("in");
- }
- void CDataShow::DataChange(CString name)
- {
- if (name=="in")//写入除变换因子
- {
- for (int i=0;i<m_dNumOfData;i++)
- {
- m_Data_x[i]=(m_Data_x[i]-m_x_start)/m_xFactor;
- m_Data_y[i]=(m_Data_y[i]-m_y_start)/m_yFactor;
- }
- }
- else//读出时恢复
- {
- for (int i=0;i<m_dNumOfData;i++)
- {
- m_Data_x[i]=(m_Data_x[i])*m_xFactor+m_x_start;
- m_Data_y[i]=(m_Data_y[i])*m_yFactor+m_y_start;
- }
- }
- }
- void CDataShow::CaptureSaveBMP(CString filename)
- {
-
- int iWidth = m_frameRect.Width();
- int iHeight = m_frameRect.Height();
- int iPixel = 16;
- //图形格式参数
- LPBITMAPINFO lpbmih = new BITMAPINFO;
- lpbmih->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
- lpbmih->bmiHeader.biWidth = iWidth;
- lpbmih->bmiHeader.biHeight = iHeight;
- lpbmih->bmiHeader.biPlanes = 1;
- lpbmih->bmiHeader.biBitCount = iPixel;
- lpbmih->bmiHeader.biCompression = BI_RGB;
- lpbmih->bmiHeader.biSizeImage = 0;
- lpbmih->bmiHeader.biXPelsPerMeter = 0;
- lpbmih->bmiHeader.biYPelsPerMeter = 0;
- lpbmih->bmiHeader.biClrUsed = 0;
- lpbmih->bmiHeader.biClrImportant = 0;
-
- //创建位图数据
- HDC hdc,hdcMem;
- HBITMAP hBitMap = NULL;
- CBitmap *pBitMap = NULL;
- CDC *pMemDC =NULL;
- BYTE *pBits;
-
- hdc = CreateIC(TEXT("DISPLAY"),NULL,NULL,NULL);
- hdcMem = CreateCompatibleDC(hdc);
- hBitMap = CreateDIBSection(hdcMem,lpbmih,DIB_PAL_COLORS,(void **)&pBits,NULL,0);
- pBitMap = new CBitmap;
- pBitMap->Attach(hBitMap);
- //pMemDC = new CDC;
- pMemDC=new CDC;
- pMemDC->Attach(hdcMem);
- pMemDC->SelectObject(pBitMap);
- //
- CRect rc(0,0,iWidth,iHeight);
- //添加自绘图形
- pMemDC->SetBkMode(TRANSPARENT);//设置透明字体
- pMemDC->SetTextColor(RGB(255,0,0));
-
-
- Draw_frameRect(pMemDC);
- Draw_childRect(pMemDC);
- Draw_MousePoint(pMemDC);
- Draw_Title(pMemDC);
- Draw_Axis(pMemDC);
- Draw_Axis_xyLebal(pMemDC);
- Draw_Data(pMemDC);
- Draw_CrossLine(pMemDC);
- Draw_SelectRect(pMemDC);
- Draw_Grid(pMemDC);
-
-
- //保存到文件并创建位图结构
- BITMAPFILEHEADER bmfh;
- ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
- *((char *)&bmfh.bfType) = 'B';
- *(((char *)&bmfh.bfType) + 1) = 'M';
- bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
- bmfh.bfSize = bmfh.bfOffBits + (iWidth * iHeight) * iPixel / 8;
-
- TCHAR szBMPFileName[128];
- int iBMPBytes = iWidth * iHeight * iPixel / 8;
- strcpy(szBMPFileName,filename);
- CFile file;
- if(file.Open(szBMPFileName,CFile::modeWrite | CFile::modeCreate))
- {
- file.Write(&bmfh,sizeof(BITMAPFILEHEADER));
- file.Write(&(lpbmih->bmiHeader),sizeof(BITMAPINFOHEADER));
- file.Write(pBits,iBMPBytes);
- file.Close();
- }
-
- pMemDC->DeleteDC();
- delete pMemDC; pMemDC = NULL;
- delete pBitMap; pBitMap = NULL;
- delete lpbmih; lpbmih = NULL;
- }
- void CDataShow::SetMaxCapturePicture(int max_p)
- {
- if (max_p<=0)
- {
- m_max_CapturePictre=1;
- }
- else
- m_max_CapturePictre=max_p;
- }
- void CDataShow::Move(CPoint p)
- {
- if (m_IsMove)
- {
- double dx,dy;
- dx=(p.x-m_move_formerpoint.x)*m_xFactor/50;
- dy=(-p.y+m_move_formerpoint.y)*m_yFactor/50;
- SetAxisRange(m_x_start-dx,m_x_end-dx,"x");
- SetAxisRange(m_y_start-dy,m_y_end-dy,"y");
- }
- }
- void CDataShow::OnRButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
-
- // m_IsSelect_enlarge=FALSE;
-
- m_move_formerpoint=point;
- m_IsMove=true;
- CStatic::OnRButtonDown(nFlags, point);
- }
- void CDataShow::OnRButtonUp(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
-
- m_move_formerpoint=m_pOrth;
- m_IsMove=false;
- CStatic::OnRButtonUp(nFlags, point);
- }
- void CDataShow::OnMButtonDown(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- m_enlarge_point=point;
- m_IsEnlarge=true;
-
- CStatic::OnMButtonDown(nFlags, point);
- }
- void CDataShow::OnMButtonUp(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
-
- m_IsEnlarge=false;
- CStatic::OnMButtonUp(nFlags, point);
- }
- void CDataShow::Enlarge(CPoint p)
- {
- if (m_IsEnlarge)
- {
-
- double dx,dy;
- dx=(p.x-m_enlarge_point.x);
- dy=(-p.y+m_enlarge_point.y);
- if (dx<0)
- {
- SetAxisRange(m_x_start*(1+0.005),m_x_end*(1+0.005),"x");
- }
- else
- SetAxisRange(m_x_start*(1-0.005),m_x_end*(1-0.005),"x");
- if (dy<0)
- {
- SetAxisRange(m_y_start*(1+0.005),m_y_end*(1+0.005),"y");
- }
- else
- SetAxisRange(m_y_start*(1-0.005),m_y_end*(1-0.005),"y");
-
- }
- }
- void CDataShow::OnLButtonDblClk(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- if (m_IsSelect_enlarge==true)
- {
- m_IsSelect_enlarge=false;
- }
- else
- m_IsSelect_enlarge=true;
- m_Select_Enlarge_p1=point;
- m_Select_Enlarge_p2=point;
-
-
- CStatic::OnLButtonDblClk(nFlags, point);
- }
- void CDataShow::Draw_SelectArea(CDC *pDC)
- {
- if (m_IsSelect_enlarge)
- {
- CPen P;
- P.CreatePen(0,0,m_selectRect_color);
- CBrush b;
- b.CreateSolidBrush(m_pdc_childRect.c);
- pDC->SelectObject(&b);
- pDC->SelectObject(&P);
- pDC->Rectangle(m_Select_Enlarge_p1.x,m_Select_Enlarge_p1.y,m_Select_Enlarge_p2.x,m_Select_Enlarge_p2.y);
- P.DeleteObject();
- b.DeleteObject();
-
- // AfxMessageBox("dr_c");
-
-
- }
-
- }
- void CDataShow::SetSelectRectColor(COLORREF C)
- {
- m_selectRect_color=C;
- }
- void CDataShow::EnlargeSelectLarge()
- {
- if (m_IsSelect_enlarge&&m_IsEnlargeClose)
- {
-
- double x1,x2,y1,y2;
- x1=m_Select_Enlarge_p1.x-m_pOrth.x;
- y1=m_Select_Enlarge_p1.y-m_pOrth.x;
- x2=m_Select_Enlarge_p2.x-m_pOrth.y;
- y2=m_Select_Enlarge_p2.y-m_pOrth.y;
- x1=(x1)*m_xFactor+m_x_start;
- y1=(y1)*m_yFactor+m_y_start;
- x2=(x2)*m_xFactor+m_x_start;
- y2=(y2)*m_yFactor+m_y_start;
- SetAxisRange(y1,y2,"y");
- SetAxisRange(x1,x2,"x");
- m_IsEnlargeClose=false;
- }
-
- }
- void CDataShow::OnRButtonDblClk(UINT nFlags, CPoint point)
- {
- // TODO: Add your message handler code here and/or call default
- // m_IsEnlargeClose=true;
- CMenu PopupMenu;
- POINT curPos;
- GetCursorPos(&curPos);
- PopupMenu.CreatePopupMenu();
-
- PopupMenu.AppendMenu(MF_ENABLED, IDC_DATA_INPUT, _T("&I数据导入"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SAVE_DATA, _T("&D保存数据"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SAVE_BMP, _T("&B保存当前图片"));
- if (!m_bIsGridOn)
- {
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_GRID_ON_OFF, _T("&O网格控制:on"));
- }
- else
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_GRID_ON_OFF, _T("&O网格控制:off"));
- if (!m_IsNoteOn)
- {
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_NOTE_ON_OFF, _T("&N文字说明:on"));
- }
- else
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_NOTE_ON_OFF, _T("&N文字说明:off"));
- if (!m_IsTimeShow)
- {
- PopupMenu.AppendMenu(MF_ENABLED, IDB_SET_TIME_SHOW, _T("&S显示时间:on"));
- }
- else
- PopupMenu.AppendMenu(MF_ENABLED, IDB_SET_TIME_SHOW, _T("&S显示时间:off"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_TITLE_COLOR, _T("&T颜色:标题"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_AXIS_COLOR, _T("&A颜色:坐标轴"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_GRID_COLOR, _T("&G颜色:网格"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_DATA_COLOR, _T("&Q颜色:数据曲线"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_XYLEBAL_COLOR, _T("&X颜色:坐标文字"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_BK_COLOR, _T("&G颜色:主框背景"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_FACE_COLOR, _T("&F颜色:曲线背景"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_CROSSLINE_COLOR, _T("&S颜色:十字线"));
- PopupMenu.AppendMenu(MF_ENABLED, IDC_SET_NOTE_COLOR, _T("&W颜色:说明文字"));
- PopupMenu.AppendMenu(MF_ENABLED, IDB_SET_TIME_TEXT_COLOR, _T("&W颜色:时间显示"));
- PopupMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, curPos.x, curPos.y, this);
- PopupMenu.DestroyMenu();
- CString str;
- //str.Format("%d",PopupMenu.GetMenuState)
- CStatic::OnRButtonDblClk(nFlags, point);
- }
- void CDataShow::Draw_Text(CDC*pDC,CString str)
- {
- pDC->SetBkMode(TRANSPARENT);
- pDC->SelectObject(m_pdc_data.new_pen);
- pDC->TextOut(m_text_point[m_numOf_Text++].x,m_text_point[m_numOf_Text].y,str);
- }
- void CDataShow::TextControl(CDC *pDC)
- {
- for (int i=0;i<m_numOf_Text;i++)
- {
- Draw_Text(pDC,m_Text[i]);
- }
- }
- //DEL void CDataShow::DataOutputControl(double n,CString in_or_out)
- //DEL {
- //DEL
- //DEL if (in_or_out=="in")
- //DEL {
- //DEL for (int i=0;i<m_dNumOfData;i++)
- //DEL {
- //DEL m_Data_x[i]=m_Data_x[i]*n;
- //DEL m_Data_y[i]=m_Data_y[i]*n;
- //DEL
- //DEL }
- //DEL m_High=m_High*n;
- //DEL m_Low=m_Low*n;
- //DEL m_Top=m_Top*n;
- //DEL m_Bottom=m_Bottom*n;
- //DEL
- //DEL m_dataRect.right=m_dataRect.Width()*n;
- //DEL m_dataRect.bottom=m_dataRect.Height()*n;
- //DEL m_frameRect.right=m_frameRect.Width()*n;
- //DEL m_frameRect.bottom=m_frameRect.Height()*n;
- //DEL h*=n;
- //DEL w*=n;
- //DEL }
- //DEL else
- //DEL {
- //DEL for (int i=0;i<m_dNumOfData;i++)
- //DEL {
- //DEL m_Data_x[i]=m_Data_x[i]/n;
- //DEL m_Data_y[i]=m_Data_y[i]/n;
- //DEL
- //DEL }
- //DEL m_High=m_High/n;
- //DEL m_Low=m_Low/n;
- //DEL m_Top=m_Top/n;
- //DEL m_Bottom=m_Bottom/n;
- //DEL m_dataRect.right+=m_dataRect.Width()*n;
- //DEL m_dataRect.bottom+=m_dataRect.Height()*n;
- //DEL m_frameRect.right+=m_frameRect.Width()*n;
- //DEL m_frameRect.bottom+=m_frameRect.Height()*n;
- //DEL h*=n;
- //DEL w*=n;
- //DEL
- //DEL }
- //DEL
- //DEL }
- void CDataShow::OnSetAxisColor()
- {
- SetColor("axis");
- }
- void CDataShow::OnSetXYlebalColor()
- {
-
- SetColor("xy");
- }
- void CDataShow::OnSetGridColor()
- {
- SetColor("grid");
- }
- void CDataShow::OnSetBKColor(){
- SetColor("bk");
- }
- void CDataShow::OnSetTitleColor()
- {
- SetColor("title");
- }
- void CDataShow::OnSetCrossLineColor()
- {
- SetColor("crossline");
- }
- void CDataShow::OnSetFaceColor()
- {
- SetColor("face");
- }
- void CDataShow::OnSetDataInput()
- {
- LoadData();
- }
- void CDataShow::OnSetNoteColor()
- {
- SetColor("note");
- }
- void CDataShow::OnSetGridOnOff()
- {
- if (m_bIsGridOn)
- {
- Grid("off");
- m_bIsGridOn=false;
- }
- else{
-
- Grid("off");
- m_bIsGridOn=true;
- }
- }
- void CDataShow::OnSaveBmp()
- {
- // TODO: Add your command handler code here
- SaveBmp();
- }
- void CDataShow::OnSaveData()
- {
- // TODO: Add your command handler code here
- SaveData();
-
- }
- void CDataShow::SetColor(CString name)
- {
-
-
- CColorDialog dlg;
- if (dlg.DoModal()==IDOK)
- {
- if (name=="data")
- SetDataColor(dlg.GetColor());
- if (name=="axis")
- SetAxisColor(dlg.GetColor());
- if (name=="xy")
- {
- SetTextColor(dlg.GetColor());
- }
- if (name=="face")
- {
- SetChildRectColor(dlg.GetColor());
- }
- if (name=="crossline")
- {
- SetCrossColor(dlg.GetColor());
- }
- if (name=="title")
- {
- SetTitleColor(dlg.GetColor());
- }
- if (name=="bk")
- {
- SetFrameColor(dlg.GetColor());
- }
- if (name=="grid")
- {
- SetGridColor(dlg.GetColor());
- }
- if (name=="note")
- {
- SetNoteColor(dlg.GetColor());
- }
- if (name=="time")
- {
- SetTimeTextColor(dlg.GetColor());
- }
- }
-
-
-
- }
- void CDataShow::Draw_NoteWord(CDC *pDC)
- {
- SetNotePoint();
- if (m_IsNoteOn)
- {
- CString in[100],out,st;
- out=m_sNote_text;
- st=out;
- int n;
- n=(m_dataRect.right-m_pNote_point.x)/8;
- pDC->SetTextColor(m_color_note);
- pDC->TextOut(m_pNote_point.x+13*5,m_pNote_point.y-20,"NOTE");
- int len=m_sNote_text.GetLength();
- int count=len/n;
- for(int i=0;i<count;i++)
- {
- in[i]="";
- for(int j=i*n;j<=i*n+n-2;j=j+2)
- {
- in[i]=in[i]+st.GetAt(j)+st.GetAt(j+1);
- out.Delete(0,2);
- }
-
-
-
- }
-
- in[count]=out;
- for(int i=0;i<=count;i++)
- pDC->TextOut(m_pNote_point.x,m_pNote_point.y+2*h*i,in[i]);
- }
-
-
- }
- void CDataShow::SetNoteText(CString note)
- {
- m_sNote_text=note;
- }
- void CDataShow::SetNotePoint()
- {
- double x,y;
- x=m_dataRect.right-m_dataRect.Width()/2.5;
- y=m_dataRect.top+8*h;
- m_pNote_point.x=x;
- m_pNote_point.y=y;
- }
- void CDataShow::SetNoteWordOn(bool IsOn)
- {
- m_IsNoteOn=IsOn;
- }
- void CDataShow::SetNoteColor(COLORREF C)
- {
- m_color_note=C;
- }
- CString CDataShow::GetTimeFormat()
- {
- CTime t;
- t=CTime::GetCurrentTime();
- CString y,mo,h,m,s;
- int x;
- x=t.GetHour();
-
- h.Format("%d",t.GetHour());
- if (x<10)
- {
- h="0"+h;
- }
- m.Format("%d",t.GetMinute());
- if (t.GetMinute()<10)
- {
- m="0"+m;
- }
- s.Format("%d",t.GetSecond());
- if (t.GetSecond()<10)
- {
- s="0"+s;
- }
- y.Format("%d",t.GetYear());
- mo.Format("%d",t.GetMonth());
- if (t.GetMonth()<10)
- {
- mo="0"+mo;
- }
- return y+"-"+mo+"-"+h+":"+m+":"+s;
- }
- void CDataShow::SetTimeTextColor(COLORREF C)
- {
- m_time_color=C;
- }
- void CDataShow::SetTimeShow(bool IsShow)
- {
- m_IsTimeShow=IsShow;
- }