?? cdrawstripchart.cpp
字號:
// CDrawStripChart.cpp: implementation of the CDrawStripChart class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CDrawStripChart.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDrawStripChart::CDrawStripChart()
{
m_Orientation=1;
m_ArrayXYValue.SetSize(0);
m_arrayLinearGauge.SetSize(0);
m_ArrayOutValue.SetSize(0);
m_offTime=60;
m_offValue=2000;
m_Point.x=0;
m_Point.y=0;
m_ClickPoint.x=0;
m_ClickPoint.y=0;
m_iDrawCursorFlag=0;
m_clickFlag=0;
m_LastDt.SetDateTime(1500,1,1,0,0,0);
m_curDt.SetDateTime(1500,1,1,0,0,0);
}
CDrawStripChart::~CDrawStripChart()
{
}
void CDrawStripChart::SetLinearGaugeNum(int iNum)//設置X標尺的數量
{
m_arrayLinearGauge.SetSize(0);
m_arrayLinearGauge.SetSize(iNum);
for(int i = 0;i < m_arrayLinearGauge.GetSize();i++)
{
SetLinearGaugeValueCount(i,1);
SetRulerParm(i,200,0,10,1);
SetValueParm(i,0,RGB(255,255,0),0);
}
}
void CDrawStripChart::SetRulerParm(int index,long iMax,long iMin,long imajortics,long iminortics)//設置index的X標尺的參數
{
if(index<0) return;
if(index>m_arrayLinearGauge.GetSize()-1) return;
m_arrayLinearGauge[index].SetRuler(iMax,iMin,imajortics,iminortics,RGB(0,0,0),RGB(0,0,0),RGB(0,0,0));
}
void CDrawStripChart::SetLinearGaugeValueCount(int index,int iCount)//設置index的X標尺的值的數量=游標的數量
{
if(iCount<1) return;
m_arrayLinearGauge[index].SetValueCount(iCount);
}
void CDrawStripChart::SetValueParm(int index,int ValueIndex,COLORREF valueColor,float value)//設置index的X標尺ValueIndex的參數
{
if(index<0) return;
if(index>m_arrayLinearGauge.GetSize()-1) return;
m_arrayLinearGauge[index].SetValueFrame(ValueIndex,valueColor,valueColor,value);
}
void CDrawStripChart::SetLGParm(int index,int ValueIndex,COLORREF valueColor)//設置index的X標尺ValueIndex的參數
{
if(index<0) return;
if(index>m_arrayLinearGauge.GetSize()-1) return;
m_arrayLinearGauge[index].SetFrame(ValueIndex,valueColor,valueColor);
}
void CDrawStripChart::SetLGValue(int index,int ValueIndex,long value)//設置index的X標尺ValueIndex的參數
{
if(index<0) return;
if(index>m_arrayLinearGauge.GetSize()-1) return;
m_arrayLinearGauge[index].SetFrameValue(ValueIndex,value);
}
void CDrawStripChart::SetStyle(int Style)//設置曲線控件的方向:縱向、橫向
{
m_Orientation = Style;
}
int CDrawStripChart::GetStyle()
{
return m_Orientation;
}
void CDrawStripChart::SetRect(RECT rc,COLORREF BkColor)//設置曲線控件的大小
{
m_CtlRect = rc;
m_rect = rc;
if(m_Orientation==0)
{
m_rect.left =m_rect.left +20;
m_rect.right =m_rect.right -20;
}
else if(m_Orientation==1)
{
m_rect.top =m_rect.top +5;
m_rect.bottom =m_rect.bottom -15;
//m_rect.left =m_rect.left +20;
//m_rect.right =m_rect.right -10;
}
m_BkColor = BkColor;
}
void CDrawStripChart::DrawRect(HDC hDC)//畫曲線控件的
{
CRect rect=m_CtlRect;
//rect.DeflateRect(1,1);
//HPEN hPen = CreatePen(PS_SOLID,1,m_BkColor);
//HBRUSH hBrush = CreateSolidBrush(m_BkColor);
HBRUSH hBrush = CreateSolidBrush(m_BkColor);
//SelectObject(hDC,hPen);
//SelectObject (hDC, hBrush) ;
//Rectangle(hDC, rect.left, rect.top, rect.right, rect.bottom);
FillRect (hDC, &rect, hBrush) ;
/*MoveToEx(hDC,rect.left,rect.top,NULL);
LineTo(hDC,rect.right,rect.top);
LineTo(hDC,rect.right,rect.bottom);
LineTo(hDC,rect.left,rect.bottom);
LineTo(hDC,rect.left,rect.top);*/
DeleteObject(hBrush);
//DeleteObject (SelectObject (hDC, GetStockObject (BLACK_PEN)));
}
void CDrawStripChart::SetLinearGaugeVisibled(int index,int iFlag)
{
if(index<0) return;
if(index>m_arrayLinearGauge.GetSize()) return;
m_arrayLinearGauge[index].SetVisibled(iFlag);
}
long CDrawStripChart::GetLinearGaugeVisibled(int index)
{
if(index<0) return -1;
if(index>m_arrayLinearGauge.GetSize()) return -1;
return m_arrayLinearGauge[index].GetVisibled();
}
void CDrawStripChart::DrawLGRect(HDC hDC)//畫曲線控件的X標尺
{
if(m_arrayLinearGauge.GetSize()<=0) return;
RECT rc;
rc=m_rect;
int width=0;
int i=0;
CString strLinearGaugecaption;
if(m_Orientation==0)//橫向
{
//rc.left = rc.left +20;
//rc.right = rc.right -20;
//rc.bottom=rc.top+30*m_arrayLinearGauge.GetSize();
rc.left =m_GridRect.left;
rc.right =m_GridRect.right;
rc.bottom=rc.top+30*m_arrayLinearGauge.GetSize();
for(int i = 0;i < m_arrayLinearGauge.GetSize();i++)
{
if(m_arrayLinearGauge[i].GetVisibled()==0)
{
rc.bottom = rc.top;
}
else
{
rc.bottom = rc.top + 30;
}
m_arrayLinearGauge[i].SetRect(rc);
//m_arrayLinearGauge[i].SetStyle(1,1,4);//m_Orientation
m_arrayLinearGauge[i].SetStyle(1,m_Orientation,m_rulerStyle);
m_arrayLinearGauge[i].SetRect(rc);
m_arrayLinearGauge[i].SetFrame(RGB(0,0,0),RGB(255,255,255));
m_arrayLinearGauge[i].Draw(hDC);
rc.top = rc.bottom;
}
}
else if(m_Orientation==1)//縱向
{
rc.top =m_GridRect.top;
rc.bottom =m_GridRect.bottom;
for(i = 0;i < m_arrayLinearGauge.GetSize();i++)
{
if(m_arrayLinearGauge[i].GetVisibled()==1)
{
width=width+30;
}
}
rc.left=rc.right-width-5;
m_LGRect=rc;
for(i = 0;i < m_arrayLinearGauge.GetSize();i++)
{
if(m_arrayLinearGauge[i].GetVisibled()==0)
{
rc.right = rc.left ;
}
else
{
rc.right = rc.left + 30;
}
//SetBkMode(hDC,TRANSPARENT);
//strLinearGaugecaption.Format(_T("%d"),i);
//DrawText(hDC,strLinearGaugecaption,strLinearGaugecaption.GetLength(),CRect(rc.left,rc.top-25,rc.right,rc.top),DT_CENTER | DT_SINGLELINE | DT_VCENTER);
m_arrayLinearGauge[i].SetRect(rc);
m_arrayLinearGauge[i].SetStyle(1,m_Orientation,m_rulerStyle);
//m_arrayLinearGauge[i].SetRect(rc);
m_arrayLinearGauge[i].SetFrame(RGB(0,0,0),RGB(255,255,255));
m_arrayLinearGauge[i].Draw(hDC);
CRect UpRect(rc.left,rc.top,rc.right,(rc.bottom-rc.top)/2);
CRect DownRect(rc.left,(rc.bottom-rc.top)/2,rc.right,rc.bottom);
if(PtInRect(&UpRect,m_ClickPoint)!=0 && m_clickFlag==1)
{
int Max=m_arrayLinearGauge[i].GetMax();
int Min=m_arrayLinearGauge[i].GetMin();
if(m_ClickPoint.y <= m_Point.y)
{
Max=Max+10;
}
else
{
Max=Max-10;
}
m_arrayLinearGauge[i].SetMaxMin(Max,Min);
m_ArrayXYValue[i].m_iYMax = Max;
m_ArrayXYValue[i].m_iYMin = Min;
}
else if(PtInRect(&DownRect,m_ClickPoint)!=0 && m_clickFlag==1)
{
int Max=m_arrayLinearGauge[i].GetMax();
int Min=m_arrayLinearGauge[i].GetMin();
if(m_ClickPoint.y <= m_Point.y)
{
Min=Min+10;
}
else
{
Min=Min-10;
}
m_arrayLinearGauge[i].SetMaxMin(Max,Min);
m_ArrayXYValue[i].m_iYMax = Max;
m_ArrayXYValue[i].m_iYMin = Min;
}
/*if(PtInRect(&rc,m_ClickPoint)!=0 && m_clickFlag==1)
{
int Max=m_arrayLinearGauge[i].GetMax();
int Min=m_arrayLinearGauge[i].GetMin();
if(m_ClickPoint.y <= m_Point.y)
{
//Max=Max+(m_Point.y - m_ClickPoint.y);
Max=Max+10;
}
else
{
//Min=Min-(m_ClickPoint.y - m_Point.y);
Min=Min-10;
}
m_arrayLinearGauge[i].SetMaxMin(Max,Min);
}*/
rc.left = rc.right;
}
/*rc.left=rc.right-30*m_arrayLinearGauge.GetSize();
for(int i = 0;i < m_arrayLinearGauge.GetSize();i++)
{
if(m_arrayLinearGauge[i].GetVisibled()==0)
{
rc.right = rc.left ;
}
else
{
rc.right = rc.left + 30;
}
m_arrayLinearGauge[i].SetRect(rc);
m_arrayLinearGauge[i].SetStyle(1,m_Orientation,m_rulerStyle);
m_arrayLinearGauge[i].SetRect(rc);
m_arrayLinearGauge[i].SetFrame(RGB(0,0,0),RGB(255,255,255));
m_arrayLinearGauge[i].Draw(hDC);
rc.left = rc.right;
}*/
}
}
void CDrawStripChart::DrawGridRect(HDC hDC)//畫曲線控件的
{
m_GridRect=m_rect;
m_GridRect.left=m_GridRect.left+5;
m_GridRect.top =m_GridRect.top+5;
m_GridRect.right =m_GridRect.right-5;
m_GridRect.bottom =m_GridRect.bottom-5;
if(m_Orientation==0)
{
m_GridRect.top=m_GridRect.top+30*m_arrayLinearGauge.GetSize();
}
if(m_Orientation==1)
{
m_GridRect.right = m_GridRect.right-30*m_arrayLinearGauge.GetSize();
}
//HPEN hPen = CreatePen(PS_SOLID,1,RGB(176,176,240));
//HBRUSH hBrush = CreateSolidBrush(RGB(0,70,141));
HBRUSH hBrush = CreateSolidBrush(m_GridBkColor);
//SelectObject(hDC,hPen);
FillRect (hDC, &m_GridRect, hBrush) ;
DeleteObject(hBrush);
//DeleteObject (SelectObject (hDC, GetStockObject (BLACK_PEN))) ;
if(PtInRect(&m_GridRect,m_ClickPoint)!=0 && m_clickFlag==1)
{
if(m_ClickPoint.y < m_Point.y)
{
//Max=Max+(m_Point.y - m_ClickPoint.y);
m_XSpan=m_XSpan+10;
}
if(m_ClickPoint.y > m_Point.y)
{
//Min=Min-(m_ClickPoint.y - m_Point.y);
m_XSpan=m_XSpan-10;
}
}
/*CRect LeftRect(XRect.left,XRect.top,XRect.right/2,XRect.bottom);
CRect RightRect(XRect.right/2,XRect.top,XRect.right,XRect.bottom);
if(PtInRect(&LeftRect,m_ClickPoint)!=0 && m_clickFlag==1)
{
}
else if(PtInRect(&RightRect,m_ClickPoint)!=0 && m_clickFlag==1)
{
}*/
}
void CDrawStripChart::SetX(int iXmajortics,int iXminortics,COLORREF XmajorticsColor,COLORREF XminorticsColor,int XSpan)
{
m_iXmajortics=iXmajortics;
m_iXminortics=iXminortics;
m_XmajorticsColor=XmajorticsColor;
m_XminorticsColor=XminorticsColor;
m_XSpan=XSpan;
}
void CDrawStripChart::DrawX(HDC hDC,long off)
{
CRect rect= m_GridRect;
HPEN hPen;
int i=0;
int y=0;
int y1=0;
int y2=0;
int n=0;
int x=0;
int x1=0;
int x2=0;
CString str;
COleDateTimeSpan dateTimeSpan;
COleDateTime datetime=COleDateTime::GetCurrentTime();;
switch(m_Orientation)//曲線方向
{
case 0:
n = m_iYmajortics * m_iYminortics;
x1 = rect.left + 1;
x2 = rect.right - 2;
for (i = 0; i <= n; i++)
{
y = rect.top + i * rect.Height() / n;
if ((i % m_iYminortics) == 0)
{
/*hPen = CreatePen(PS_SOLID,1,m_YmajorticsColor);
SelectObject(hDC,hPen);
CString str;
float iPointTime=0;
float fValue=0;
long lSize=m_ArrayXYValue.GetSize();
if(lSize <= 0 ) return;
iPointTime = rect.right - x;
iPointTime = iPointTime / (rect.right - rect.left) * m_XSpan;
COleDateTimeSpan dTSpan;
dTSpan.SetDateTimeSpan(0,0,0,iPointTime);
COleDateTime curDt = m_LastDt - dTSpan;
for(int index=0;index<1;index++)
{
for(long l=0;l<m_ArrayXYValue[index].m_ArrayValue.GetSize();l++)
{
if(m_ArrayXYValue[index].m_ArrayValue[l].m_DataTime==curDt)
{
fValue=m_ArrayXYValue[0].m_ArrayValue[l].m_value;
break;
}
else
{
fValue=0;
}
}
}
str.Format(_T("%02d:%02d:%02d"),curDt.GetHour(),curDt.GetMinute(),curDt.GetSecond());
if(i!=0)
{
SetBkMode(hDC,TRANSPARENT);
SetTextColor(hDC,RGB(255,255,255));
DrawText(hDC,str,str.GetLength(),CRect(x,y2,x+200,y2+200),DT_LEFT | DT_TOP);
}*/
}
else
{
hPen = CreatePen(PS_SOLID,1,m_YminorticsColor);
SelectObject(hDC,hPen);
}
MoveToEx(hDC,x1, y,NULL);
LineTo(hDC,x2, y);
DeleteObject (SelectObject (hDC, GetStockObject (BLACK_PEN))) ;
}
break;
case 1:
n = m_iXmajortics * m_iXminortics;
y1 = rect.top + 1;
y2 = rect.bottom - 2;
for (i = 0; i <= n; i++)
//for (i = 1; i < 3; i++)
{
//x = rect.left + i * rect.Width() / n;
x = rect.right - i * rect.Width() / n;
if ((i % m_iXminortics) == 0)
{
hPen = CreatePen(PS_SOLID,1,m_XmajorticsColor);
SelectObject(hDC,hPen);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -