📄 curveview.cpp
字号:
// CurveView.cpp : CCurveView 类的实现
//
#include "stdafx.h"
#include "WspProcess.h"
#include "EachItemDoc.h"
#include "CurveView.h"
#include "ClientSocket.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#define XSCROLLBARID 12001
#define YSCROLLBARID 12002
// CCurveView
IMPLEMENT_DYNCREATE(CCurveView, CView)
BEGIN_MESSAGE_MAP(CCurveView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_WM_SIZE()
ON_WM_HSCROLL()
ON_WM_VSCROLL()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_MESSAGE(WM_ONRECEIVE, OnReceive)
END_MESSAGE_MAP()
// CCurveView 构造/销毁
CCurveView::CCurveView()
{
// TODO: 在此处添加构造代码
m_bCanSize = false;
m_bFlag = false;
}
CCurveView::~CCurveView()
{
}
BOOL CCurveView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
return CView::PreCreateWindow(cs);
}
void CCurveView::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
CEachItemDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CRealTime *pGraph;
pGraph = &(pDoc->m_graph);
DWORD SecsPerCycle = pGraph->m_SpeedLevel[7];// 1 seconds(1 cycle per second)
double UnitsPerCycle = pGraph->m_gapLevel[3];//(0.5 cycle per unit)
pGraph->InitialSetting(30, 5, 50, 5, SecsPerCycle, 0, UnitsPerCycle);
pGraph->AddLine("Sample Line1", 1000, RGB(255, 0, 0));
pGraph->AddLine("Sample Line2", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line3", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line4", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line5", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line6", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line7", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line8", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line9", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line10", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line11", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line12", 3000, RGB(0, 255, 0));
pGraph->AddLine("Sample Line13", 3000, RGB(0, 255, 0));
CRect rect;
GetClientRect(&rect);
pGraph->RecalcRects(rect);
m_xScrollBar.Create(WS_CHILD | WS_VISIBLE | SBS_HORZ, pGraph->XScrollBarSize(), this, XSCROLLBARID);
m_xScrollBar.SetScrollRange(pGraph->m_nXTicks, pGraph->m_nXTicks);
m_xScrollBar.EnableWindow(FALSE);
m_yScrollBar.Create(WS_CHILD | WS_VISIBLE | SBS_VERT, pGraph->YScrollBarSize(), this, YSCROLLBARID);
m_yScrollBar.SetScrollRange(0, pGraph->m_nYTicks * pGraph->m_nYPages);
m_yScrollBar.SetScrollPos(pGraph->m_nYTicks * pGraph->m_nYPages / 2);
m_yScrollBar.EnableWindow(FALSE);
m_bCanSize = true;
/* pGraph->m_curLine.m_nColor = RGB(255, 0, 0);//亮红色
pGraph->m_curLine.m_dScaleLow = 10;
pGraph->m_curLine.m_dScaleHigh = 90;
pGraph->m_curLine.m_sName = "Sample Line";
pGraph->m_curLine.m_sDescription = "N/A";
pGraph->m_curLine.m_sUnit = "N/A";
pGraph->m_curLine.m_dMin = 0;
pGraph->m_curLine.m_dMax =100;
pGraph->m_curLine.m_nLineStyle = PS_SOLID;
pGraph->m_curLine.m_nLineWidth = 0;*/
}
// CCurveView 绘制
void CCurveView::OnDraw(CDC* pDC)
{
CEachItemDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: 在此处为本机数据添加绘制代码
CRealTime *pGraph;
pGraph = &(pDoc->m_graph);
CRect rect;
GetClientRect(rect);
pGraph->DoPrepare(pDC,rect);
bool realTime = pGraph->m_bRealTime;
pGraph->m_bRealTime = false;
pGraph->RefreshGraph(pDC);
pGraph->m_redrawFlag = false;
// if(realTime)pGraph->RedrawLastPage(pDC);
if(realTime)
pGraph->RestoreRealDraw();
else
pGraph->m_bRealTime = false;
/* CRect rect,rect1;
GetClientRect(rect);
rect1.SetRect(rect.left + rect.Width() / 4, rect.top + rect.Height() / 4,
rect.right - rect.Width() / 4, rect.bottom - rect.Height() / 4);
pDC->Rectangle(rect1);
LOGFONT lf;
CString str(_T("HELLOKJHGF"));
::ZeroMemory(&lf, sizeof(lf));
lf.lfHeight = rect1.Height() * 4 / 5;
lf.lfWidth = rect1.Width() / 2 / str.GetLength();
lf.lfWeight = FW_NORMAL;
lf.lfOrientation= 0;
lf.lfEscapement = 0;
::lstrcpy(lf.lfFaceName, _T("Times New Roman"));
CFont font, *pOldFont;
font.CreateFontIndirect(&lf);
pOldFont = pDC->SelectObject(&font);
pDC->DrawText(str, &rect1, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
pDC->SelectObject(pOldFont);*/
}
// CCurveView 打印
BOOL CCurveView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CCurveView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印前添加额外的初始化
}
void CCurveView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除过程
}
// CCurveView 诊断
#ifdef _DEBUG
void CCurveView::AssertValid() const
{
CView::AssertValid();
}
void CCurveView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CEachItemDoc* CCurveView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CEachItemDoc)));
return (CEachItemDoc*)m_pDocument;
}
#endif //_DEBUG
// CCurveView 消息处理程序
void CCurveView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
CRealTime *pGraph = &(GetDocument()->m_graph);
if(m_bFlag)
{
CClientDC dc(this);
pGraph->RefreshGraph(&dc);
}
else
m_bFlag = true;
if (pGraph->m_bRealTime)
{
m_xScrollBar.EnableWindow(FALSE);
m_yScrollBar.EnableWindow(FALSE);
}
else
{
int nPos = pGraph->m_nPage * pGraph->m_nXTicks + pGraph->m_nTick;
if(nPos >= 0)
{
int nMin, nMax;
m_xScrollBar.GetScrollRange(&nMin, &nMax);
if(nMax > pGraph->m_nXTicks)
m_xScrollBar.SetScrollPos(nPos);
else
m_xScrollBar.EnableWindow(FALSE);
m_yScrollBar.EnableWindow(TRUE);
}
}
}
void CCurveView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
if(m_bCanSize)
{
CRect rect;
GetClientRect(&rect);
CRealTime *pGraph = &(GetDocument()->m_graph);
pGraph->RecalcRects(rect);
rect = pGraph->XScrollBarSize();
m_xScrollBar.MoveWindow(rect);
rect = pGraph->YScrollBarSize();
m_yScrollBar.MoveWindow(rect);
}
}
void CCurveView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CView::OnHScroll(nSBCode, nPos, pScrollBar);
CRealTime *pGraph = &(GetDocument()->m_graph);
int nTemp1, nMin, nMax;
nTemp1 = pScrollBar->GetScrollPos();
pScrollBar->GetScrollRange(&nMin, &nMax);
switch(nSBCode)
{
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
if (nPos < nTemp1)
{
pGraph->SetForward(false);
pGraph->m_nOffset = nTemp1 - nPos;
}
else
{
pGraph->SetForward(true);
pGraph->m_nOffset = nPos - nTemp1;
}
pGraph->m_nTick = nPos % pGraph->m_nXTicks;
pGraph->m_nPage = nPos / pGraph->m_nXTicks;
break;
case SB_LINELEFT:
if (nTemp1 > nMin)
{
--nTemp1;
pGraph->SetForward(false);
pGraph->m_nOffset = 1;
}
else
{
nTemp1 = nMin;
pGraph->m_nOffset = 0;
}
pScrollBar->SetScrollPos(nTemp1);
pGraph->m_nTick = nTemp1 % pGraph->m_nXTicks;
pGraph->m_nPage = nTemp1 / pGraph->m_nXTicks;
break;
case SB_LINERIGHT:
if (nTemp1 < nMax)
{
++nTemp1;
pGraph->SetForward(true);
pGraph->m_nOffset = 1;
}
else
{
nTemp1 = nMax;
pGraph->m_nOffset = 0;
}
pScrollBar->SetScrollPos(nTemp1);
pGraph->m_nTick = nTemp1 % pGraph->m_nXTicks;
pGraph->m_nPage = nTemp1 / pGraph->m_nXTicks;
break;
default:
pGraph->m_nOffset = 0;
break;
}
pGraph->m_nYOffset = 0;
GetDocument()->UpdateAllViews(NULL);
}
void CCurveView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CView::OnVScroll(nSBCode, nPos, pScrollBar);
CRealTime *pGraph = &(GetDocument()->m_graph);
int nTemp1, nMin, nMax;
nTemp1 = pScrollBar->GetScrollPos();
pScrollBar->GetScrollRange(&nMin, &nMax);
switch(nSBCode)
{
case SB_THUMBPOSITION:
pScrollBar->SetScrollPos(nPos);
// pGraph->m_nYOffset = nPos - nTemp1;
pGraph->m_nYOffset = nTemp1 - nPos;
break;
case SB_LINELEFT:
// pGraph->m_nYOffset = -1;
pGraph->m_nYOffset = 1;
if (nTemp1 > nMin)
{
--nTemp1;
}
else
{
nTemp1 = nMin;
}
pScrollBar->SetScrollPos(nTemp1);
break;
case SB_LINERIGHT:
// pGraph->m_nYOffset = 1;
pGraph->m_nYOffset = -1;
if (nTemp1 < nMax)
{
++nTemp1;
}
else
{
nTemp1 = nMax;
}
pScrollBar->SetScrollPos(nTemp1);
break;
default:
pGraph->m_nYOffset = 0;
break;
}
pGraph->m_nOffset = 0;
GetDocument()->UpdateAllViews(NULL);
}
void CCurveView::OnLButtonDown(UINT nFlags, CPoint point)
{
CRealTime *pGraph = &(GetDocument()->m_graph);
pGraph->PrepareEdit(this, point);
CView::OnLButtonDown(nFlags, point);
}
void CCurveView::OnMouseMove(UINT nFlags, CPoint point)
{
CRealTime *pGraph = &(GetDocument()->m_graph);
if(pGraph->DoEditing(this, point))
GetDocument()->UpdateAllViews(NULL);
CView::OnMouseMove(nFlags, point);
}
void CCurveView::OnLButtonUp(UINT nFlags, CPoint point)
{
CRealTime *pGraph = &(GetDocument()->m_graph);
pGraph->FinishEditing(this, point);
GetDocument()->UpdateAllViews(NULL);
CView::OnLButtonUp(nFlags, point);
}
LRESULT CCurveView::OnReceive(WPARAM wParam, LPARAM lParam)
{
CEachItemDoc *pDoc = GetDocument();
CPkg *pkg = pDoc->m_recvQueue.Remove();
pDoc->Receive(0, pkg);
delete pkg;
return 0L;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -