📄 drawcurvedlg.cpp
字号:
// 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 + -