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

📄 oscillograph3view.cpp

📁 VCsuishu fudai de yixie chengxuyuanma
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -