📄 oscillograph3view.cpp
字号:
if( m_bShow){//正在示波
if (lParam){//be suspended
m_bSuspend = TRUE;
KillTimer(1);
}
else{//resume
m_bSuspend = FALSE;
KillTimer(1);
SetTimer(1,(int)(500 * m_dMsDiv),NULL);
}
}
}
if (wParam == IDC_SHOW)
{
if (lParam) {//run
m_bShow = TRUE;
m_myQuitBtn[1].SetState(3);//IDC_SUSPEND
m_dMsDiv = m_msDivSliderCtrl.GetCurrentValue();
m_dVDiv = m_vDivSliderCtrl.GetCurrentValue();
m_oscopeCtrl.SetVdiv(m_dVDiv);//也在OnVScroll里设置
m_oscopeCtrl.SetMsDiv(m_dMsDiv);//此处主要是为了第一次设置
m_oscopeCtrl.SetRun(TRUE);
KillTimer(1);
SetTimer(1,(int)(500 * m_dMsDiv),NULL);
}
else{//end
m_bShow = FALSE;
m_myQuitBtn[1].SetState(2);//IDC_SUSPEND
m_myQuitBtn[1].SetIsSelected(FALSE);//使暂停键弹起
m_bSuspend = FALSE;
m_oscopeCtrl.SetRun(FALSE);
m_oscopeCtrl.Reset();
KillTimer(1);
}
}
if (wParam == IDC_SHOWOLD)
{
if(!m_bShow){//没有示波时
CString FullPathName;
CFile fRead;
CFileDialog fReadDlg(TRUE, ".sbq", "sbq1",
OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT);//, "*.sbq\0 *.*", this
fReadDlg.m_ofn.lpstrFilter = "示波器(*.sbq)\0*.sbq\0AllFiles(*.*)\0*.*\0";
if(fReadDlg.DoModal() == IDOK)
{
FullPathName = fReadDlg.GetPathName();
if(fRead.Open(FullPathName, CFile::modeReadWrite)
== FALSE)
{
AfxMessageBox("Cannot open the file!:(");
}
//读回数据
fRead.Read(&m_nCurrentChannel, 1 * sizeof(int));
fRead.Read(&m_dMsDiv, 1 * sizeof(double));
fRead.Read(&m_dVDiv, 1 * sizeof(double));
fRead.Read(&m_dCurrentPoints, 501 * sizeof(double));
fRead.Close();
//**更新各个按钮状态
// UpdateData(FALSE);
//更新旋钮图
// CSpinButtonCtrl* pSpin;
// pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_MSDIV);
// pSpin->SetPos((int)(m_dMsDiv * 100.0));
// pSpin = (CSpinButtonCtrl*) GetDlgItem(IDC_VDIV);
// pSpin->SetPos((int)(m_dVDiv * 10.0));
switch(m_nCurrentChannel)
{
case 1://1通道
m_nCurrentChannel = 1;
m_myQuitBtn[6].SetIsSelected(TRUE);
m_myQuitBtn[7].SetIsSelected(FALSE);//IDC_CHANNEL2
m_myQuitBtn[8].SetIsSelected(FALSE);//IDC_CHANNEL3
break;
case 2://2通道
m_nCurrentChannel = 2;
m_myQuitBtn[6].SetIsSelected(FALSE);//IDC_CHANNEL1
m_myQuitBtn[7].SetIsSelected(TRUE);
m_myQuitBtn[8].SetIsSelected(FALSE);//IDC_CHANNEL3
break;
case 3://3通道
m_nCurrentChannel = 3;
m_myQuitBtn[6].SetIsSelected(FALSE);//IDC_CHANNEL1
m_myQuitBtn[7].SetIsSelected(FALSE);//IDC_CHANNEL2
m_myQuitBtn[8].SetIsSelected(TRUE);
break;
}
//
m_msDivSliderCtrl.SetCurrentValue(m_dMsDiv);
m_vDivSliderCtrl.SetCurrentValue(m_dVDiv);
//重现曲线图
m_oscopeCtrl.SetMsDiv(m_dMsDiv);
m_oscopeCtrl.SetVdiv(m_dVDiv);
m_oscopeCtrl.SetRun(TRUE);//切记一定要有这一句
m_oscopeCtrl.AppendPoints(m_dCurrentPoints);
}
}
else{
AfxMessageBox("停止示波先:)");
}
}
if (wParam == IDC_SAVE)
{
if(m_bSuspend)
{//暂停时才能保存
//新建或打开文件准备存储
CString FullPathName;
CFile fSave;
CFileDialog fSaveDlg(FALSE, ".sbq", "sbq1",
OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT);//, "*.sbq", this
fSaveDlg.m_ofn.lpstrFilter = "示波器(*.sbq)\0*.sbq\0AllFiles(*.*)\0*.*\0";
if(fSaveDlg.DoModal() == IDOK){
FullPathName = fSaveDlg.GetPathName();
if(fSave.Open(FullPathName, CFile::modeReadWrite
|CFile::modeCreate) == FALSE){
AfxMessageBox("Cannot open the file!");
}
//写入数据
// UpdateData(TRUE);//切记要有这句
fSave.Write(&m_nCurrentChannel, 1 * sizeof(int));
fSave.Write(&m_dMsDiv, 1 * sizeof(double));
fSave.Write(&m_dVDiv, 1 * sizeof(double));
fSave.Write(&m_dCurrentPoints, 501 * sizeof(double));
//关闭文件
fSave.Close();
}
}
else{
AfxMessageBox("暂停先:)");
}
}
if (wParam == IDC_CHANNEL1)
{
if (1) {//be selected
m_nCurrentChannel = 1;
m_myQuitBtn[6].SetIsSelected(TRUE);//IDC_CHANNEL1
m_myQuitBtn[7].SetIsSelected(FALSE);//IDC_CHANNEL2
m_myQuitBtn[8].SetIsSelected(FALSE);//IDC_CHANNEL3
m_dMsDiv = m_dMsDiv1;
m_dVDiv = m_dVDiv1;
m_msDivSliderCtrl.SetCurrentValue(m_dMsDiv);
m_vDivSliderCtrl.SetCurrentValue(m_dVDiv);
}
}
if (wParam == IDC_CHANNEL2)
{
if (1) {//be selected
m_nCurrentChannel = 2;
m_myQuitBtn[6].SetIsSelected(FALSE);//IDC_CHANNEL1
m_myQuitBtn[7].SetIsSelected(TRUE);//IDC_CHANNEL2
m_myQuitBtn[8].SetIsSelected(FALSE);//IDC_CHANNEL3
m_dMsDiv = m_dMsDiv2;
m_dVDiv = m_dVDiv2;
m_msDivSliderCtrl.SetCurrentValue(m_dMsDiv);
m_vDivSliderCtrl.SetCurrentValue(m_dVDiv);
}
}
if (wParam == IDC_CHANNEL3)
{
if (1) {//be selected
m_nCurrentChannel = 3;
m_myQuitBtn[6].SetIsSelected(FALSE);//IDC_CHANNEL1
m_myQuitBtn[7].SetIsSelected(FALSE);//IDC_CHANNEL2
m_myQuitBtn[8].SetIsSelected(TRUE);//IDC_CHANNEL3
m_dMsDiv = m_dMsDiv3;
m_dVDiv = m_dVDiv3;
m_msDivSliderCtrl.SetCurrentValue(m_dMsDiv);
m_vDivSliderCtrl.SetCurrentValue(m_dVDiv);
}
}
return 0;
}
void COscillograph3View::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
m_dMsDiv = m_msDivSliderCtrl.GetCurrentValue();
m_dVDiv = m_vDivSliderCtrl.GetCurrentValue();
m_oscopeCtrl.SetVdiv(m_dVDiv);//也在OnVScroll里设置
m_oscopeCtrl.SetMsDiv(m_dMsDiv);
double f0, dt, A;
double dPoints[501];
f0 = 1;
dt = m_dMsDiv/5.0;
A = 20.0;
int i = 0;
int k =1 ;
switch(m_nCurrentChannel)
{
case 1:
for(i = 0; i <= 500; i++)
{
dPoints[i] = A * sin (2 * PI * f0 *
(i + m_nTimes1 * 501) * dt);
m_dCurrentPoints[i] = dPoints[i];//保存以备保存回放用
}
break;
case 2://方波
for(i = 0; i <= 500; i++)
{
dPoints[i] = A * sin (2 * PI * f0 *
(i + m_nTimes1 * 501) * dt);
if (dPoints[i] > 0)
{
dPoints[i] = A;
}
else
{
dPoints[i] = (-1)*A;
}
m_dCurrentPoints[i] = dPoints[i];//保存以备保存回放用
}
break;
case 3:
break;
}
m_nTimes1 ++;
m_oscopeCtrl.AppendPoints(dPoints);
CFormView::OnTimer(nIDEvent);
}
LRESULT COscillograph3View::OnChangeValue(WPARAM wParam, LPARAM lParam)
{
if (wParam == IDC_MSDIV_SLIDER)
{
m_dMsDiv = m_msDivSliderCtrl.GetCurrentValue();
switch(m_nCurrentChannel)
{
case 1:
m_dMsDiv1 = m_dMsDiv;//保存
break;
case 2:
m_dMsDiv2 = m_dMsDiv;//保存
break;
case 3:
m_dMsDiv3 = m_dMsDiv;//保存
break;
}
//更新画面
m_oscopeCtrl.SetMsDiv(m_dMsDiv);
if(m_oscopeCtrl.GetRun())
{
m_oscopeCtrl.DrawPoints();
}
}
if (wParam == IDC_VDIV_SLIDER)
{
m_dVDiv = m_vDivSliderCtrl.GetCurrentValue();
switch(m_nCurrentChannel)
{
case 1:
m_dVDiv1 = m_dVDiv;//保存
break;
case 2:
m_dVDiv2 = m_dVDiv;//保存
break;
case 3:
m_dVDiv3 = m_dVDiv;//保存
break;
}
//更新画面
m_oscopeCtrl.SetVdiv(m_dVDiv);
if(m_oscopeCtrl.GetRun())
{
m_oscopeCtrl.DrawPoints();
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -