?? cdrawstripchart.cpp
字號(hào):
}
else
{
hPen = CreatePen(PS_SOLID,1,m_XminorticsColor);
SelectObject(hDC,hPen);
}
if ((i % m_iXminortics) == 0)
{
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("%04d-%02d-%02d\n%02d:%02d:%02d\n%.3f"),curDt.GetYear(),curDt.GetMonth(),curDt.GetDay(),
curDt.GetHour(),curDt.GetMinute(),curDt.GetSecond(),fValue);*/
/*str.Format(_T("%04d-%02d-%02d\n%02d:%02d:%02d"),curDt.GetYear(),curDt.GetMonth(),curDt.GetDay(),
curDt.GetHour(),curDt.GetMinute(),curDt.GetSecond());*/
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);
}
}
MoveToEx(hDC,x+off, y1,NULL);
LineTo(hDC,x+off, y2);
DeleteObject (SelectObject (hDC, GetStockObject (BLACK_PEN))) ;
}
//DeleteObject(hPen);
//SelectObject(hDC,GetStockObject(BLACK_PEN));
break;
case 2:
/*n = m_iXmajortics * m_iXminortics;
x1 = rect.left + 1;
x2 = rect.right - 2;
for (i = 0; i <= n; i++)
{
int y = rect.top + i * rect.Height() / n;
//int y = rect.bottom - i * rect.Height() / n;
if ((i % m_iXminortics) == 0)
{
hPen = CreatePen(PS_SOLID,1,m_XmajorticsColor);
SelectObject(hDC,hPen);
}
else
{
hPen = CreatePen(PS_SOLID,1,m_XminorticsColor);
SelectObject(hDC,hPen);
}
if ((i % m_iXminortics) == 0)
{
dateTimeSpan.SetDateTimeSpan(0,0,0,m_iXStart / m_iXmajortics * i);
COleDateTime datetime(m_iXLast - dateTimeSpan);
//str.Format(_T("%d-%d-%d %d:%d:%d"),datetime.GetYear(),datetime.GetMonth(),datetime.GetDay(),datetime.GetHour(),datetime.GetMinute(),datetime.GetSecond());
str.Format(_T("%d:%d:%d"),datetime.GetHour(),datetime.GetMinute(),datetime.GetSecond());
DrawText(hDC,str,str.GetLength(),CRect(x2-100,y,x2,y+100), DT_LEFT | DT_VCENTER);
}
MoveToEx(hDC,x1, y,NULL);
LineTo(hDC,x2, y);
}
DeleteObject(hPen);
SelectObject(hDC,GetStockObject(BLACK_PEN));*/
break;
case 3:
/*n = m_iXmajortics * m_iXminortics;
x1 = rect.left + 1;
x2 = rect.right - 2;
for (i = 0; i <= n; i++)
{
int y = rect.top + i * rect.Height() / n;
//int y = rect.bottom - i * rect.Height() / n;
if ((i % m_iXminortics) == 0)
{
hPen = CreatePen(PS_SOLID,1,m_XmajorticsColor);
SelectObject(hDC,hPen);
}
else
{
hPen = CreatePen(PS_SOLID,1,m_XminorticsColor);
SelectObject(hDC,hPen);
}
if ((i % m_iXminortics) == 0)
{
dateTimeSpan.SetDateTimeSpan(0,0,0,m_iXStart / m_iXmajortics * i);
COleDateTime datetime(m_iXLast - dateTimeSpan);
//str.Format(_T("%d-%d-%d %d:%d:%d"),datetime.GetYear(),datetime.GetMonth(),datetime.GetDay(),datetime.GetHour(),datetime.GetMinute(),datetime.GetSecond());
str.Format(_T("%d:%d:%d"),datetime.GetHour(),datetime.GetMinute(),datetime.GetSecond());
DrawText(hDC,str,str.GetLength(),CRect(x2-100,y,x2,y+100), DT_LEFT | DT_VCENTER);
}
MoveToEx(hDC,x1, y,NULL);
LineTo(hDC,x2, y);
}
DeleteObject(hPen);
SelectObject(hDC,GetStockObject(BLACK_PEN));*/
break;
}
}
void CDrawStripChart::SetY(int iYmajortics,int iYminortics,COLORREF YmajorticsColor,COLORREF YminorticsColor)//,int iYMax,int iYMin,int iYDisplayMax,int iYDisplayMin)
{
m_iYmajortics=iYmajortics;
m_iYminortics=iYminortics;
m_YmajorticsColor=YmajorticsColor;
m_YminorticsColor=YminorticsColor;
}
void CDrawStripChart::DrawY(HDC hDC)
{
CRect rect= m_GridRect;
HPEN hPen;
int i=0;
int x1=0;
int x2=0;
int n=0;
int x=0;
int y=0;
int y1=0;
int y2=0;
switch(m_Orientation)//曲線方向0:左至右,1:右至左,2上至下,3下至上
{
case 0:
break;
case 1:
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);
}
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))) ;
}
//DeleteObject(hPen);
//SelectObject(hDC,GetStockObject(BLACK_PEN));
break;
case 2:
break;
case 3:
/*n = m_iYmajortics * m_iYminortics;
y1 = rect.top + 1;
y2 = rect.bottom - 2;
for (i = 0; i <= n; i++)
{
//x = rect.left + i * rect.Width() / n;
x = rect.right - i * rect.Width() / n;
if ((i % m_iYminortics) == 0)
{
hPen = CreatePen(PS_SOLID,1,m_iYmajortics);
SelectObject(hDC,hPen);
}
else
{
hPen = CreatePen(PS_SOLID,1,m_iYminortics);
SelectObject(hDC,hPen);
}
MoveToEx(hDC,x, y1,NULL);
LineTo(hDC,x, y2);
DeleteObject (SelectObject (hDC, GetStockObject (BLACK_PEN))) ;
}*/
break;
}
}
void CDrawStripChart::SetXYCount(int count)
{
//if(count < 1) return;
m_ArrayXYValue.SetSize(count);
m_ArrayOutValue.SetSize(count);
}
int CDrawStripChart::GetXYCount()
{
return m_ArrayXYValue.GetSize();
}
/*void CDrawStripChart::SetXY(int Index,int iYMax,int iYMin)//,int iYDisplayMax,int iYDisplayMin)
{
m_ArrayXYValue[Index].m_iYMax=iYMax;//最大值
m_ArrayXYValue[Index].m_iYMin=iYMin;//最小值
//m_ArrayXYValue[Index].m_iYDisplayMax=iYDisplayMax;//最大顯示值
//m_ArrayXYValue[Index].m_iYDisplayMin=iYDisplayMin;//最小顯示值
}*/
//void CDrawStripChart::AddXY(int index,int iYMax,int iYMin,int XSpan,int Timelevel,long color,long Visibled,long lineWidth,long lineType,long Excursion,COleDateTime DateTime,long value)
void CDrawStripChart::AddXY(int index,int iYMax,int iYMin,int Timelevel,long color,long Visibled,long lineWidth,long lineType,long Excursion,COleDateTime DateTime,float value)
{
//if(index < m_ArrayXYValue.GetSize()) return;
m_ArrayXYValue[index].m_iYMax = iYMax;
m_ArrayXYValue[index].m_iYMin = iYMin;
//m_ArrayXYValue[index].m_XSpan = XSpan;
m_ArrayXYValue[index].m_color = color;//顏色
m_ArrayXYValue[index].m_Visibled = Visibled;//是否可見
m_ArrayXYValue[index].m_lineWidth = lineWidth;//線寬
m_ArrayXYValue[index].m_lineType = lineType;//線型 0:直線;1:點(diǎn);
m_ArrayXYValue[index].m_Excursion = Excursion;//曲線偏移
m_ArrayXYValue[index].Add(DateTime,value);
if(m_LastDt<DateTime) m_LastDt=DateTime;
}
void CDrawStripChart::SetXYPrt(int index,int iYMax,int iYMin,int Timelevel,long color,long Visibled,long lineWidth,long lineType,long Excursion)
{
//if(index < m_ArrayXYValue.GetSize()) return;
m_ArrayXYValue[index].m_iYMax = iYMax;
m_ArrayXYValue[index].m_iYMin = iYMin;
m_ArrayXYValue[index].m_color = color;//顏色
m_ArrayXYValue[index].m_Visibled = Visibled;//是否可見
m_ArrayXYValue[index].m_lineWidth = lineWidth;//線寬
m_ArrayXYValue[index].m_lineType = lineType;//線型 0:直線;1:點(diǎn);
m_ArrayXYValue[index].m_Excursion = Excursion;//曲線偏移
}
void CDrawStripChart::AddXYValue(int index,COleDateTime DateTime,float value)
{
if(index > m_ArrayXYValue.GetSize()-1) return;
m_ArrayXYValue[index].Add(DateTime,value);
if(m_LastDt<DateTime) m_LastDt=DateTime;
}
void CDrawStripChart::DrawCurve(HDC hDC)
{
RECT rect= m_GridRect;
long x=0;
long y=0;
long l=0;
int indexArray=0;
int index=0;
long Excursion=0;
COleDateTimeSpan dateTimeSpan;
long start=0;
long end=0;
switch(m_Orientation)//曲線方向0:左至右,1:右至左,2上至下,3下至上
{
case 0:
case 1:
indexArray=0;
for(indexArray=0;indexArray < m_ArrayXYValue.GetSize();indexArray++)
{
if(m_ArrayXYValue[indexArray].m_Visibled==0) continue;
if(m_ArrayXYValue[indexArray].m_ArrayValue.GetSize()<=0) continue;
if(m_ArrayXYValue[indexArray].m_ArrayValue.GetSize() < m_XSpan)
{
start=0;
end=m_ArrayXYValue[indexArray].m_ArrayValue.GetSize();
}
else
{
end=m_ArrayXYValue[indexArray].m_ArrayValue.GetSize();
start=end-m_XSpan;
}
index=0;
for(index=start; index < end;index++)
{
HPEN hPen = CreatePen(PS_SOLID,m_ArrayXYValue[indexArray].m_lineWidth,m_ArrayXYValue[indexArray].m_color);
SelectObject(hDC,hPen);
dateTimeSpan = m_ArrayXYValue[indexArray].m_ArrayValue[end-1].m_DataTime - m_ArrayXYValue[indexArray].m_ArrayValue[index].m_DataTime;
l=(long)dateTimeSpan.GetTotalSeconds();
if(l>=m_XSpan)
{
l=m_XSpan;
}
x = (rect.right- rect.left) - ((rect.right - rect.left) * l / m_XSpan ) ;
if(m_ArrayXYValue[indexArray].m_Excursion<=0)
{
y = rect.bottom - (rect.bottom - rect.top) * (m_ArrayXYValue[indexArray].m_ArrayValue[index].m_value-m_ArrayXYValue[indexArray].m_iYMin) / (m_ArrayXYValue[indexArray].m_iYMax - m_ArrayXYValue[indexArray].m_iYMin);
}
else
{
Excursion = (rect.bottom - rect.top) / m_ArrayXYValue[indexArray].m_Excursion;
y = rect.bottom - (rect.bottom - rect.top) * (m_ArrayXYValue[indexArray].m_ArrayValue[index].m_value-m_ArrayXYValue[indexArray].m_iYMin) / (m_ArrayXYValue[indexArray].m_iYMax - m_ArrayXYValue[indexArray].m_iYMin);
y=y-Excursion;
}
//CFile f(_T("\\harddisk\\info.txt"),CFile::modeWrite);
//CString str;
//str.Format(_T("rect.width=%d,l=%d,m_XSpan=%d,x=%d\r\n"),rect.right- rect.left,l,m_XSpan,x);
//f.SeekToEnd();
//f.Write(str,str.GetLength()*2);
//f.Close();
if(x>rect.right)
{
x=rect.right;
}
if(x<rect.left)
{
x=rect.left;
}
if(y>rect.bottom)
{
y=rect.bottom;
}
if(y<rect.top)
{
y=rect.top;
}
if(index == start)// || l > m_offTime )
{
MoveToEx(hDC,x,y,NULL);
}
else
{
LineTo(hDC,x,y);
}
DeleteObject (SelectObject (hDC, GetStockObject (BLACK_PEN))) ;
}
}
break;
case 2:
case 3:
break;
}
}
void CDrawStripChart::SetCursorPoint(CPoint point)
{
m_Point=point;
}
void CDrawStripChart::SetClickPoint(CPoint point,int clickFlag)
{
m_ClickPoint=point;
m_clickFlag=clickFlag;
}
void CDrawStripChart::DrawCursor(HDC hDC)
{
CRect rect=m_GridRect;
float iPointTime=0;
float fValue=0;
if(PtInRect(rect,m_Point)!=0)
{
HPEN hPen = CreatePen(PS_SOLID,2,RGB(255,0,0));
SelectObject(hDC,hPen);
CString str;
long lSize=m_ArrayXYValue.GetSize();
if(lSize <= 0 ) return;
iPointTime = rect.right - m_Point.x;
iPointTime = iPointTime / (rect.right - rect.left) * m_XSpan;
COleDateTimeSpan dTSpan;
dTSpan.SetDateTimeSpan(0,0,0,iPointTime);
m_curDt = m_LastDt - dTSpan;
for(int i=0;i<1;i++)
{
for(long l=0;l<m_ArrayXYValue[i].m_ArrayValue.GetSize();l++)
{
if(m_ArrayXYValue[i].m_ArrayValue[l].m_DataTime==m_curDt)
{
m_ArrayOutValue[i]=m_ArrayXYValue[i].m_ArrayValue[l].m_value;
break;
}
else
{
fValue=0;
}
}
}
/*for(int i=0;i<1;i++)
{
for(long l=0;l<m_ArrayXYValue[i].m_ArrayValue.GetSize();l++)
{
if(m_ArrayXYValue[i].m_ArrayValue[l].m_DataTime==curDt)
{
fValue=m_ArrayXYValue[0].m_ArrayValue[l].m_value;
break;
}
else
{
fValue=0;
}
}
}*
/*str.Format(_T("%04d-%02d-%02d\n%02d:%02d:%02d\n%.3f"),curDt.GetYear(),curDt.GetMonth(),curDt.GetDay(),
curDt.GetHour(),curDt.GetMinute(),curDt.GetSecond(),fValue);
DrawText(hDC,str,str.GetLength(),CRect(m_Point.x,m_Point.y,m_Point.x+200,m_Point.y+200),DT_LEFT | DT_TOP);*/
MoveToEx(hDC,rect.left, m_Point.y,NULL);
LineTo(hDC,rect.right, m_Point.y);
MoveToEx(hDC,m_Point.x, rect.top,NULL);
LineTo(hDC,m_Point.x, rect.bottom);
DeleteObject (SelectObject (hDC, GetStockObject (BLACK_PEN)));
}
}
void CDrawStripChart::Draw(HDC hDC)
{
DrawRect(hDC);
DrawGridRect(hDC);
DrawX(hDC,0);
DrawY(hDC);
DrawLGRect(hDC);
DrawCurve(hDC);
if(m_iDrawCursorFlag==1)
{
DrawCursor(hDC);
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -