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

📄 drawcurvedlg.cpp

📁 EVC 编的示波器程序
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// DrawCurveDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DrawCurve.h"
#include "DrawCurveDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// DrawCurveDlg dialog


DrawCurveDlg::DrawCurveDlg(CWnd* pParent /*=NULL*/)
	: CDialog(DrawCurveDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(DrawCurveDlg)
	m_iLineSize = 0;
	m_nsettime = 0;
	m_dsettimevalue = 0.0;
	m_nsetYValue1 = 0;
	m_dYPerUnit1 = 0.0;
	m_dYOffset1 = 0.0;
	m_nsetYValue2 = 0;
	m_dYPerUnit2 = 0.0;
	m_dYOffset2 = 0.0;
	m_nsetYValue3 = 0;
	m_dYPerUnit3 = 0.0;
	m_dYOffset3 = 0.0;
	dataindex=0;

	m_bCheckAC1=FALSE;
	m_bCheckAC2=FALSE;
	m_bCheckAC3=FALSE;

	m_bCheckOpenCH1=TRUE;
	m_bCheckOpenCH2=TRUE;
	m_bCheckOpenCH3=TRUE;
	m_bCheckSync=FALSE;	
	//}}AFX_DATA_INIT
//	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

	m_dLineDataAvg1=0;
	m_dLineDataAvg2=0;
	m_dLineDataAvg3=0;

	m_bRunFlag=TRUE;}


void DrawCurveDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(DrawCurveDlg)
	DDX_Control(pDX, IDC_STATIC1, m_ctrl);
	DDX_Slider(pDX, IDC_SLIDER_SETTIME, m_nsettime);
	DDX_Text(pDX, IDC_EDIT_TIME_PER_UNIT, m_dsettimevalue);
	DDX_Slider(pDX, IDC_SLIDER_SETYVALUE1, m_nsetYValue1);
	DDX_Text(pDX, IDC_EDIT_Y_PER_UNIT1, m_dYPerUnit1);
	DDX_Text(pDX, IDC_EDIT_OFFSET1, m_dYOffset1);
	DDX_Check(pDX, IDC_CHECK_AC1, m_bCheckAC1);
	DDX_Slider(pDX, IDC_SLIDER_SETYVALUE2, m_nsetYValue2);
	DDX_Text(pDX, IDC_EDIT_Y_PER_UNIT2, m_dYPerUnit2);
	DDX_Text(pDX, IDC_EDIT_OFFSET2, m_dYOffset2);
	DDX_Check(pDX, IDC_CHECK_AC2, m_bCheckAC2);
	DDX_Slider(pDX, IDC_SLIDER_SETYVALUE3, m_nsetYValue3);
	DDX_Text(pDX, IDC_EDIT_Y_PER_UNIT3, m_dYPerUnit3);
	DDX_Text(pDX, IDC_EDIT_OFFSET3, m_dYOffset3);
	DDX_Check(pDX, IDC_CHECK_AC3, m_bCheckAC3);
	DDX_Check(pDX, IDC_CHECK_OPEN_CH1, m_bCheckOpenCH1);
	DDX_Check(pDX, IDC_CHECK_OPEN_CH2, m_bCheckOpenCH2);
	DDX_Check(pDX, IDC_CHECK_OPEN_CH3, m_bCheckOpenCH3);
	DDX_Check(pDX, IDC_CHECK_SYNC, m_bCheckSync);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(DrawCurveDlg, CDialog)
	//{{AFX_MSG_MAP(DrawCurveDlg)
	ON_WM_TIMER()
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_CHECK_AC1, OnCheckAc1)
	ON_EN_CHANGE(IDC_EDIT_OFFSET1, OnChangeEditOffset1)
	ON_BN_CLICKED(IDC_CHECK_AC2, OnCheckAc2)
	ON_EN_CHANGE(IDC_EDIT_OFFSET2, OnChangeEditOffset2)
	ON_BN_CLICKED(IDC_CHECK_AC3, OnCheckAc3)
	ON_EN_CHANGE(IDC_EDIT_OFFSET3, OnChangeEditOffset3)
	ON_BN_CLICKED(IDC_BUTTON_RUNSTOP, OnButtonRunstop)
	ON_BN_CLICKED(IDC_CHECK_OPEN_CH1, OnCheckOpenCh1)
	ON_BN_CLICKED(IDC_CHECK_OPEN_CH2, OnCheckOpenCh2)
	ON_BN_CLICKED(IDC_CHECK_OPEN_CH3, OnCheckOpenCh3)
	ON_BN_CLICKED(IDC_CHECK_SYNC, OnCheckSync)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// DrawCurveDlg message handlers

BOOL DrawCurveDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	m_ctrl.CreateObject();	


	CSliderCtrl *pSlider;
	//设置时间控制滑动条
 	pSlider= (CSliderCtrl*)GetDlgItem(IDC_SLIDER_SETTIME);
//	ASSERT(pSlider!=NULL);
	pSlider->SetRange(0,15);  	//设置滑动条取值范围
	m_nsettime=5;	
	m_dsettimevalue=m_ctrl.SetTimeRef(m_nsettime);

	//设置Y1控制滑动条
	pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_SETYVALUE1);
	pSlider->SetRange(0,20);  	//设置滑动条取值范围
	m_nsetYValue1=10;	
	m_dYPerUnit1=m_ctrl.SetYValueRef(0,m_nsetYValue1);

	pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_SETYVALUE2);
	pSlider->SetRange(0,20);  	//设置滑动条取值范围
	m_nsetYValue2=10;	
	m_dYPerUnit2=m_ctrl.SetYValueRef(1,m_nsetYValue2);

	pSlider = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_SETYVALUE3);
	pSlider->SetRange(0,20);  	//设置滑动条取值范围
	m_nsetYValue3=10;	
	m_dYPerUnit3=m_ctrl.SetYValueRef(2,m_nsetYValue3);

	UpdateData(FALSE);





	
	m_ctrl.SetTitle(_T("U-T"));
	m_ctrl.SetYName(_T("U/V"));
//	m_ctrl.SetXName(_T("T/ms"));
//	m_ctrl.SetYMinMax(-10,20);
//	m_ctrl.SetXMin(0);
//	m_ctrl.SetXMax(50);
	m_ctrl.SetWithDash(FALSE);
	m_ctrl.SetWithDot(FALSE);
	SetTimer(1,10,0);
	int iIndex = m_ctrl.AddLine();

	m_ctrl.SetLegend(iIndex,_T("Ua"));
	m_ctrl.SetPointType(iIndex,CBaseGr::CIRCLE);
	m_ctrl.SetDotSize(2);
	m_ctrl.SetLineColor(iIndex,RGB(0,0,0));
	m_ctrl.SetPointColor(iIndex,RGB(0,0,0));
	for(int i=0;i<100;i++)
	{
		m_ctrl.AddLineData(iIndex,i,0);
	}

	iIndex = m_ctrl.AddLine();
	m_ctrl.SetLegend(iIndex,_T("二月"));
	m_ctrl.SetPointType(iIndex,CBaseGr::FDIAMOND);
	m_ctrl.SetLineColor(iIndex,RGB(0,255,0));
	m_ctrl.SetPointColor(iIndex,RGB(0,255,0));
	for(int j=0;j<100;j++)
	{
		m_ctrl.AddLineData(iIndex,j,0);
	}

	iIndex = m_ctrl.AddLine();
	m_ctrl.SetLegend(iIndex,_T("三月"));
	m_ctrl.SetPointType(iIndex,CBaseGr::RECTANGLE);
	m_ctrl.SetLineColor(iIndex,RGB(0,0,255));
	m_ctrl.SetPointColor(iIndex,RGB(0,0,255));
	for(int k=0;k<100;k++)
	{
		m_ctrl.AddLineData(iIndex,k,0);
	}

	return TRUE;  // return TRUE  unless you set the focus to a control
}

////////////////////////////////////////////////////////////////
//定时器响应函数 OnTimer
////////////////////////////////////////////////////////////////
void DrawCurveDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	double LineFirstData;
	double newdada;
	CString str;
	switch (nIDEvent)
	{		
	case 1:
		if(m_bRunFlag)
		{
			LineFirstData=m_ctrl.DeleteLineData(0,0);
			newdada=10*sin(0.1*PI*dataindex)+0;
			m_ctrl.AddLineData(0,99,newdada);
			m_dLineDataAvg1=m_dLineDataAvg1+(newdada-LineFirstData)/100;
			str.Format(_T("%.3f"),m_dLineDataAvg1);
			GetDlgItem(IDC_EDIT_DC1)->SetWindowText(str);  //实时刷新DC 分量

			LineFirstData=m_ctrl.DeleteLineData(1,0);
			newdada=8*cos(2*PI/3+0.1*PI*dataindex)+1;
			m_ctrl.AddLineData(1,99,newdada);
			m_dLineDataAvg2=m_dLineDataAvg2+(newdada-LineFirstData)/100;
			str.Format(_T("%.3f"),m_dLineDataAvg2);
			GetDlgItem(IDC_EDIT_DC2)->SetWindowText(str);  //实时刷新DC 分量

			LineFirstData=m_ctrl.DeleteLineData(2,0);
			newdada=5*sin(4*PI/3+0.1*PI*0)+0;
			m_ctrl.AddLineData(2,99,newdada);
			m_dLineDataAvg3=m_dLineDataAvg3+(newdada-LineFirstData)/100;
			str.Format(_T("%.3f"),m_dLineDataAvg3);
			GetDlgItem(IDC_EDIT_DC3)->SetWindowText(str);  //实时刷新DC 分量

			m_ctrl.InvalidateRectangle();
		}
		if(dataindex++==19)
			dataindex=0;
		break;
	default:
		break;
	}


	CDialog::OnTimer(nIDEvent);
}

////////////////////////////////////////////////////////////////
//滚动条类设置响应函数 OnHScroll
////////////////////////////////////////////////////////////////
void DrawCurveDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	UpdateData(TRUE);
	switch (pScrollBar->GetDlgCtrlID())
	{
	case IDC_SLIDER_SETTIME:
		m_dsettimevalue=m_ctrl.SetTimeRef(m_nsettime);
		break;
	case IDC_SLIDER_SETYVALUE1:
		m_dYPerUnit1=m_ctrl.SetYValueRef(0,m_nsetYValue1);
		if(m_bCheckSync) // 如果同步
		{
			m_nsetYValue3=m_nsetYValue2=m_nsetYValue1;
			m_dYPerUnit2=m_ctrl.SetYValueRef(1,m_nsetYValue2);
			m_dYPerUnit3=m_ctrl.SetYValueRef(2,m_nsetYValue3);
		}
		break;
	case IDC_SLIDER_SETYVALUE2:
		m_dYPerUnit2=m_ctrl.SetYValueRef(1,m_nsetYValue2);
		break;
	case IDC_SLIDER_SETYVALUE3:
		m_dYPerUnit3=m_ctrl.SetYValueRef(2,m_nsetYValue3);
		break;
	default:
		break;
	}

	UpdateData(FALSE);
	m_ctrl.InvalidateRectangle();

	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}


////////////////////////////////////////////////////////////////
//DC/AC 切换响应函数 OnCheckAc
////////////////////////////////////////////////////////////////
void DrawCurveDlg::OnCheckAc1() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	CEdit *pEdit = (CEdit*)GetDlgItem(IDC_EDIT_OFFSET1);
	if(m_bCheckAC1)
	{
		pEdit->EnableWindow(FALSE);  	
		m_ctrl.SetYOffsetValueRef(0,m_dLineDataAvg1);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -