📄 scape.cpp
字号:
// Scape.cpp : implementation file
//
#include "stdafx.h"
#include "CTestCStatic.h"
#include "Scape.h"
#include "CTestCStaticDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CScape
CScape::CScape()
{
m_x=1000;
m_y=800;
m_unit=2;
m_xunit=10;
m_yunit=6;
m_xoffset=10;
m_yoffset=10;
m_numpoint=0;
tx=0;
State1=true;
}
CScape::~CScape()
{
}
BEGIN_MESSAGE_MAP(CScape, CStatic)
//{{AFX_MSG_MAP(CScape)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CScape message handlers
void CScape::DrawForm()
{
CRect size;
CString strnum;
int i,j,Tcount;
CDC* pDC=this->GetDC();
pDC->SetBkMode(TRANSPARENT);
CFont font;
font. CreateFont (MulDiv (12, -pDC->GetDeviceCaps (LOGPIXELSY), 82), 0, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS,_T("Arial"));
pDC->SelectObject(font);
GetWindowRect(size);
pDC->FillRect(CRect(0,0,size.Width(),size.Height()),&CBrush(RGB(0,255,0)));
m_width=size.Width();
m_hight=size.Height();
m_x=m_width/m_unit;
m_y=m_hight/m_unit;
CPen pen1(PS_DOT,1,RGB(0,0,0));
CPen pen2(PS_SOLID,1,RGB(0,0,0));
CPen pen3(PS_DOT,1,RGB(0,0,0));
pDC->SelectObject(&pen1);
for(i=m_xoffset,m_xcount=1,Tcount=1;i<m_x;i=i+m_xunit,Tcount++)
{
if ((State1&&Tcount%2==0)||(!State1&&Tcount%2==1)) {
pDC->SelectObject(&pen2);
}
else pDC->SelectObject(&pen1);
if (i==m_xoffset) {pDC->SelectObject(&pen2);
}
pDC->MoveTo(CPoint(i*m_unit,m_yoffset*m_unit));
pDC->LineTo(CPoint(i*m_unit,(m_y-1)*m_unit));
if(i==m_xoffset) continue;
strnum.Format("%d",m_xcount++);
pDC->TextOut((i+1)*m_unit-8,(m_y-1)*m_unit,strnum);
}
for(j=m_y-1,m_ycount=1;j>m_yoffset;j=j-m_yunit)
{
pDC->SelectObject(&pen1);
if (j==m_y-1) pDC->SelectObject(&pen2);
pDC->MoveTo(CPoint(m_xoffset*m_unit,j*m_unit));
pDC->LineTo(CPoint(m_x*m_unit,j*m_unit));
if(j==m_y) continue;
strnum.Format("%d",m_ycount++);
pDC->TextOut(m_xoffset*m_unit-18,(j-6)*m_unit-8,strnum);
}
pDC->TextOut(10*m_unit-8,m_y*m_unit,"0");
if(m_ScapeType==osci) State1=!State1;
m_valarry.SetSize(m_x);
// CCTestCStaticDlg* pWnd=(CCTestCStaticDlg*)GetParent();
// CWnd* pWnd=GetParent();
GetParent()->ReleaseDC(pDC);
}
void CScape::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
DrawForm();
// dc.SetMapMode(MM_LOMETRIC);
// Do not call CStatic::OnPaint() for painting messages
}
void CScape::Chang(ModeScape scapetype)
{
CDC* pDC=GetDC();
DisPoint point,tst,tst1;
CPen pen(PS_SOLID,1,RGB(255,0,0));
pDC->SetBkMode(TRANSPARENT);
pDC->SelectObject(&pen);
DrawForm();
m_ScapeType=scapetype;
int i;
int length=m_valarry.GetSize();
point.x=min(m_xoffset+m_xunit*tx,m_x);
i=rand()%m_ycount;
point.y=m_y-1-m_yunit*i;
point.value=min(rand()%m_hight,rand()%m_width);
for(i=length-1;i>0;i--)
m_valarry[i]=m_valarry[i-1];
m_valarry[0]=point;m_numpoint++;
length=min(m_numpoint,length);
for(i=0;i<length-1;i++)
{
// tst=m_valarry[i];tst1=m_valarry[i+1];
if (m_valarry[i].x<m_x&&m_valarry[i+1].x<m_x) {
pDC->MoveTo(m_valarry[i].x*m_unit,m_valarry[i].y*m_unit);
pDC->LineTo(m_valarry[i+1].x*m_unit,m_valarry[i+1].y*m_unit);
}
}
switch(scapetype) {
case osci:
for(i=0;i<length;i++) m_valarry[i].x+=m_xunit; //信号往右移动为"+",左移为"-"
break;
case slot:
tx+=0.5; //"-"信号从左产生,向右移动;"+"反之。
if (m_valarry[0].x==m_x) {
// for(i=0;i<length;i++) m_valarry[i].x=0; //信号往右移动为"+",左移为"-"
tx=0;
m_numpoint=0;
}
break;
default:break;
}
/*
tt+=0.1; //"-"信号从左产生,向右移动;"+"反之。
if (m_valarry[length-1].x>m_x) {
tt=0;
}*/
GetParent()->ReleaseDC(pDC);
}
void CScape::Chang(int scapetype)
{
ModeScape type=ModeScape(scapetype);
Chang(type);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -