// PlotWnd.cpp : implementation file
//
#include "stdafx.h"
#include "PlotWnd.h"
#include "MemDC.h"
#include "Math.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPlotWnd
CPlotWnd::CPlotWnd()
{
m_dlow = 0.0;
m_dhigh = 15.0;
m_bLineVisible = FALSE;
m_lDatanum = 0;
m_CollectTime = 1;
m_logFont.lfHeight = -10;
m_logFont.lfWidth = 0;
m_logFont.lfEscapement = 0;
m_logFont.lfOrientation = 0;
m_logFont.lfWeight = 400;
m_logFont.lfItalic = FALSE;
m_logFont.lfUnderline = FALSE;
m_logFont.lfStrikeOut = FALSE;
m_logFont.lfCharSet = ANSI_CHARSET;
m_logFont.lfOutPrecision = OUT_DEFAULT_PRECIS;
m_logFont.lfClipPrecision = CLIP_DEFAULT_PRECIS;
m_logFont.lfQuality = PROOF_QUALITY;
m_logFont.lfPitchAndFamily = DEFAULT_PITCH;
strcpy(m_logFont.lfFaceName,"Ariel");
m_font.CreateFontIndirect(&m_logFont ) ;
m_pData = NULL;
m_iTrendType = 0;
m_lTotalNum = 0;
m_lCurNum = 0;
m_bRTrendStart = FALSE;
m_lTimeRange = 10;
ChannelFlag = false;
}
CPlotWnd::~CPlotWnd()
{
}
BEGIN_MESSAGE_MAP(CPlotWnd, CWnd)
//{{AFX_MSG_MAP(CPlotWnd)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPlotWnd message handlers
BOOL CPlotWnd::Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID,CString chan_num1,BOOL mode)
{
// TODO: Add your specialized code here and/or call the base class
if(!CWnd::Create(NULL, "通道1实时数据", dwStyle, rect, pParentWnd, nID, NULL))
return FALSE;
m_ctrlRect = rect;
mode_flag = mode;
chan_num = chan_num1;
pParentWnd->ClientToScreen(m_ctrlRect);
ScreenToClient(m_ctrlRect);
ComputeRect();
return TRUE;
}
CTime CPlotWnd::getnowtime()
{
struct tm *newtime;
time_t long_time;
time( &long_time ); /* Get time as long integer. */
newtime = localtime( &long_time ); /* Convert to local time. */
int year = newtime->tm_year+1900;
int month = newtime->tm_mon+1;
int day = newtime->tm_mday;
int hour =newtime->tm_hour;
int minu = newtime->tm_min;
int sec = newtime->tm_sec;
CTime tt(year,month,day,hour,minu,sec);
return tt;
}
void CPlotWnd::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
CMemDC memDC(&dc);
Draw(&memDC);
// Do not call CWnd::OnPaint() for painting messages
}
void CPlotWnd::Draw(CDC *pDC)
{
DrawBKGround(pDC);
// DrawLine(pDC);
if (mode_flag == TRUE)
{
// if(m_iTrendType == 0)//修正实时曲线Y轴最大值
// {
// JustYScale();
// }
DrawXGrid(pDC,m_beginTime,m_endTime,10);
DrawYGrid(pDC,m_dlow,m_dhigh,20);
if(m_iTrendType==1)
{
DrawLine(pDC);
UpdateShowRect(pDC);
}
else if(m_iTrendType ==0)
{
DrawRealLine(pDC);
UpdateShowRect(pDC);
}
if(m_bLineVisible) DrawScrollLine(pDC);
DrawChannel(pDC);
}
}
void CPlotWnd::DrawBKGround(CDC *pDC)
{
pDC->SetBkMode (0);
CBrush brushctlBkColor(RGB(128,128,128));//gray13160660
CBrush brushmachine(RGB(200,200,200));
CBrush brushplotBkColor(RGB(0,0,0)); //black画图背景
CBrush brushmachine1(RGB(255,255,255));
CBrush* poldBrush = pDC->SelectObject(&brushctlBkColor) ;
CRect crecttemp;
crecttemp.left = m_ctrlRect.left+1;
crecttemp.right = m_ctrlRect.right-1;
crecttemp.top = m_ctrlRect.top+1;
crecttemp.bottom = m_ctrlRect.bottom-1;
if (mode_flag == TRUE)
{
pDC->FillRect (m_ctrlRect,&brushctlBkColor);//填充整个窗口的颜色
}
else
{
pDC->FillRect(m_ctrlRect,&brushmachine);
pDC->FillRect(crecttemp,&brushmachine1);
DrawChannel(pDC);
}
pDC->SelectObject(poldBrush) ;
poldBrush = pDC->SelectObject(&brushplotBkColor);
CRect rectFrame;
rectFrame.left = m_plotRect.left -2;
rectFrame.top = m_plotRect.top -2 ;
rectFrame.right = m_plotRect.right +2 ;
rectFrame.bottom = m_plotRect.bottom +2 ;
if (mode_flag == TRUE)
{
pDC->FillRect(m_plotRect,&brushplotBkColor);
}
pDC->SelectObject(poldBrush) ;
}
void CPlotWnd::DrawXGrid(CDC *pDC,CTime btime,CTime etime,int divNum)
{
//绘制X网格线
int i, j;
int ticklong = 8 ;
CPen linePen(PS_DOT,1,RGB(160,160,160));
CPen tickPen(PS_SOLID,1,RGB(160,160,160)) ;
CPen* pOldPen =pDC->SelectObject(&tickPen);
for(i = 1; i < 10; i ++)//画坐标点
{
j = m_plotRect.left + (int)(1.0 * i * (m_plotRect.right -m_plotRect.left )/ 10);
pDC->MoveTo(j,m_plotRect.top+1);
pDC->LineTo(j,m_plotRect.top + ticklong) ;
pDC->MoveTo(j,m_plotRect.bottom -1);
pDC->LineTo(j,m_plotRect.bottom - ticklong ) ;
}
pDC->SelectObject(pOldPen) ;
pOldPen = pDC->SelectObject(&linePen) ;
for(i = 1; i < 10; i ++)
{
j = m_plotRect.left + (int)(1.0 * i * (m_plotRect.right -m_plotRect.left )/ 10);
pDC->MoveTo(j,m_plotRect.top+ticklong+3);
pDC->LineTo(j,m_plotRect.bottom - ticklong -3) ;
}
pDC->SelectObject(pOldPen);
//画坐标
if(m_iTrendType==1)
{
SetStringAlign(LEFT,CENTER) ;
CFont* poldfont = pDC->SelectObject(&m_font) ;
COLORREF color = pDC->SetTextColor(RGB(64,255,64)) ;
int posdis = int((double(m_plotRect.Width ())/double(divNum)));
j = m_plotRect.left - 6 ;
CString str;
CTime* ptime;
ptime = new CTime[divNum+1];
ptime[0] = btime;
ptime[divNum] = etime;
long b,e;
b = btime.GetTime ();
e = etime.GetTime ();
CTimeSpan span((e-b)/divNum);
StartTime = btime.GetTime ();
for(i=1;i<divNum;i++)
{
ptime[i] = ptime[i-1] + span;
}
for(i = 0; i<= divNum; i++)
{
str = FormatTimeString(ptime[i]);
PrintString(pDC,j,m_axisXRect.bottom -8 ,0,str) ;
j = j + posdis;
}
pDC->SetTextColor(color) ;
pDC->SelectObject(poldfont);
delete[] ptime;
}
else if(m_iTrendType==0&&m_bRTrendStart&&m_lCurNum>1)
{
SetStringAlign(LEFT,CENTER) ;
CFont* poldfont = pDC->SelectObject(&m_font) ;
COLORREF color = pDC->SetTextColor(RGB(64,255,64)) ;
int posdis = int((double(m_plotRect.Width ())/double(divNum)));
j = m_plotRect.left - 6 ;
CString str;
CTime* ptime;
ptime = new CTime[divNum+1];
ptime[0] = m_pData[0].time ;
CTimeSpan span1(0,0,0,m_lTimeRange);
ptime[divNum] = ptime[0]+span1;
long b,e;
b = ptime[0].GetTime ();
StartTime = ptime[0];
e = ptime[divNum].GetTime ();
CTimeSpan span((e-b)/divNum);
for(i=1;i<divNum;i++)
{
ptime[i] = ptime[i-1] + span;
}
for(i = 0; i<= divNum; i++)
{
str = FormatTimeString(ptime[i]);
PrintString(pDC,j,m_axisXRect.bottom -8 ,0,str) ;
j = j + posdis;
}
pDC->SetTextColor(color) ;
pDC->SelectObject(poldfont);
delete[] ptime;
}
}
void CPlotWnd::DrawYGrid(CDC *pDC,double min, double max, int divNum)
{
//绘制Y轴网格线及其坐标
int i, j;
int ticklong = 8 ;
CPen tickPen(PS_SOLID,1,RGB(160,160,160)) ;
CPen linePen(PS_DOT ,1,RGB(160,160,160)) ;
CPen* pOldPen =pDC->SelectObject(&tickPen);
double datadis=(max-min)/double(divNum);
//画坐标
SetStringAlign(LEFT,CENTER) ;
CFont* poldfont = pDC->SelectObject(&m_font) ;
COLORREF color = pDC->SetTextColor(RGB(64,255,64)) ;
int posdis = int((double(m_plotRect.Height())/double(divNum)));
j = m_plotRect.bottom - 3 ;
CString str;
for(i = 0; i<= divNum; i++)
{
str.Format ("%5.1f",min+datadis*i);
PrintString(pDC,m_axisYRect.left,j,0,str) ;
j = j - posdis;
}
pDC->SetTextColor(color) ;
//画网格线
for(i = 1; i < 20 ; i ++)
{
j = m_plotRect.top + (int)(1.0 * i * (m_plotRect.bottom -m_plotRect.top ) / 20);
pDC->MoveTo(m_plotRect.left +1,j);
pDC->LineTo(m_plotRect.left + ticklong ,j ) ;
没有合适的资源?快使用搜索试试~ 我知道了~
串口通信程序源码1.0Debug版
共247个文件
h:57个
cpp:54个
sbr:54个
需积分: 0 17 下载量 144 浏览量
2008-12-17
09:32:31
上传
评论
收藏 6.9MB RAR 举报
温馨提示
接受1通道温度值(实时曲线实时),采样4S 存在问题 1、16个通道间切换有问题 2、X轴时间对不上 VC做的
资源详情
资源评论
资源推荐
收起资源包目录
串口通信程序源码1.0Debug版 (247个子文件)
CommWizard.aps 23KB
CommWizard.bsc 25KB
CommWizard.clw 3KB
CommWizard.com 120KB
PlotWnd.cpp 23KB
mschart.cpp 15KB
CommWizardDlg.cpp 13KB
mscomm.cpp 8KB
ShowDlg.cpp 7KB
vcplot.cpp 7KB
vcdatagrid.cpp 6KB
vcdatapointlabel.cpp 4KB
vcseries.cpp 4KB
DataBase.cpp 3KB
vclabel.cpp 3KB
vcaxis.cpp 3KB
vcaxistitle.cpp 2KB
vcfootnote.cpp 2KB
vctitle.cpp 2KB
CommWizard.cpp 2KB
vcpen.cpp 2KB
vcvaluescale.cpp 2KB
font.cpp 2KB
vclightsource.cpp 2KB
vcfont.cpp 2KB
vccolor.cpp 2KB
vcdatapoint.cpp 2KB
vcmarker.cpp 2KB
vccategoryscale.cpp 2KB
SettingDlg.cpp 2KB
vclegend.cpp 2KB
vcseriesposition.cpp 2KB
vctextlayout.cpp 2KB
vcintersection.cpp 2KB
vcaxisscale.cpp 2KB
vcstatline.cpp 2KB
vclight.cpp 2KB
vcbrush.cpp 2KB
vcframe.cpp 2KB
vclightsources.cpp 1KB
vclocation.cpp 1KB
vcview3d.cpp 1KB
vcweighting.cpp 1KB
vcplotbase.cpp 1KB
vcshadow.cpp 1KB
vclcoor.cpp 1KB
vccoor.cpp 1KB
vcwall.cpp 1KB
vcbackdrop.cpp 1KB
vcseriesmarker.cpp 1KB
vctick.cpp 1KB
vcfill.cpp 1KB
vcseriescollection.cpp 990B
vcdatapoints.cpp 977B
vclabels.cpp 955B
vcaxisgrid.cpp 930B
vcrect.cpp 905B
StdAfx.cpp 212B
SkinPPWTL.dll 536KB
SkinPPWTL.dll 536KB
CommWizard.dsp 11KB
CommWizard.dsw 589B
CommWizard.exe 244KB
SkinPPWTL.h 7KB
mschart.h 5KB
PlotWnd.h 4KB
mscomm.h 3KB
MemDC.h 3KB
vcdatagrid.h 3KB
vcplot.h 2KB
CommWizardDlg.h 2KB
vcdatapointlabel.h 2KB
vcseries.h 2KB
vcaxis.h 2KB
vclabel.h 2KB
vcfootnote.h 2KB
vcaxistitle.h 2KB
vctitle.h 1KB
CommWizard.h 1KB
ShowDlg.h 1KB
vcdatapoint.h 1KB
resource.h 1KB
font.h 1KB
vclegend.h 1KB
vcvaluescale.h 1KB
vcpen.h 1KB
vccategoryscale.h 1KB
vclight.h 1KB
vcseriesposition.h 1KB
vcfont.h 1KB
vclightsource.h 1KB
vcmarker.h 1KB
vctextlayout.h 1KB
vcstatline.h 1KB
vclightsources.h 1KB
vcintersection.h 1KB
vccolor.h 1KB
vcaxisscale.h 1KB
SettingDlg.h 1KB
vclocation.h 1KB
共 247 条
- 1
- 2
- 3
cihongwei2008
- 粉丝: 28
- 资源: 45
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0