⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scape.cpp

📁 基于VC开发了一个虚拟示波器
💻 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 + -