📄 adstatusview.cpp
字号:
// ADStatusView.cpp : implementation file
//
#include "stdafx.h"
#include "Sys.h"
#include "ADFrm.h"
#include "ADDoc.h"
#include "ADDigitView.h"
#include "ADWaveView.h"
#include "ADStatusView.h"
#include "ParaCfgView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CADStatusView
extern BOOL m_bFirstCreateDeviceFile;
extern PCI2006_PARA_AD Para;
extern int m_ProcessDigitalMode;
extern int m_ProcessGraphicMode;
extern BOOL m_FirstScreenStop;
extern int m_AnalyzeChannel;
extern int m_UpperLimit;
extern int m_LowerLimit;
extern int m_ScreenVolume;
extern int m_TriggerVolt;
extern CEdit* pCountEdit;
extern CEdit* pRangeEdit;
extern CEdit* pRatioEdit;
extern BOOL m_BounceStop;
extern BOOL m_AnalyzeCheck;
extern BOOL m_StopUpdateView;
extern int CurrentIndex;
extern int m_MiddleLsb;
extern float m_AnalyzeAllCount;
extern UINT m_OverLimitCount;
extern int m_ProcessMoveVolt;
extern BOOL bCreateDevice;
extern int nProcessMode;
extern BOOL bDeviceADRun;
extern int m_DigitalDataShowMode;
extern SHORT ADBuffer[MAX_SEGMENT][16384];
extern BOOL bCheckOverflow; // 是否检测FIFO溢出标志
extern int Volt_Range ; //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
extern float PerLsbVolt; // 单位LSB的电压值
extern BOOL m_bProgress;
extern PCI2006_PARA_AD ADPara;
extern int m_nBouncePointsCount;//多点分析所需要的点数
extern BOOL m_bBounce;//是否串道分析
extern int m_nBounceNum;//串道次数
extern int m_nLower;//串道分析 下限
extern int m_nUpper;//串道分析 上限
extern int m_nBounceChannel;//分析的通道号
extern BOOL m_bPointsAnalyze;//是否多点分析
IMPLEMENT_DYNCREATE(CADStatusView, CFormView)
CADStatusView::CADStatusView()
: CFormView(CADStatusView::IDD)
{
//{{AFX_DATA_INIT(CADStatusView)
m_nStopFirstDigitalShow = FALSE;
//}}AFX_DATA_INIT
bFirstChangeTrigge=TRUE; // 当某些类对象没有准备就绪时,不能操作CEdit框
}
CADStatusView::~CADStatusView()
{
}
void CADStatusView::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CADStatusView)
DDX_Control(pDX, IDC_CHECK_Point, m_CHECK_Points);
DDX_Control(pDX, IDC_EDIT_UpperLimit, m_EDIT_Upper);
DDX_Control(pDX, IDC_EDIT_LowerLimit, m_EDIT_Lower);
DDX_Control(pDX, IDC_COMBO_IndexChannel, m_COMBO_IndexChannel);
DDX_Control(pDX, IDC_CHECK_Bunch, m_CHECK_Bunch);
DDX_Control(pDX, IDC_EDIT_BunchCount, m_EDIT_BunchCount);
DDX_Control(pDX, IDC_CHECK_BunchStop, m_CHECK_BunchStop);
DDX_Control(pDX, IDC_EDIT_AnalyzeCount, m_nAnalyzeCount);
DDX_Control(pDX, IDC_EDIT_OverRange, m_nOverRange);
DDX_Control(pDX, IDC_EDIT_OverRatio, m_nOverRatio);
DDX_Control(pDX, IDC_EDIT_TriggerVolt, m_nTringgerVolt);
DDX_Control(pDX, IDC_EDIT_ScreenVolume, m_nScreenVolt);
DDX_Control(pDX, IDC_EDIT_MoveVolt, m_nMoveVolt);
DDX_Check(pDX, IDC_CHECK_StopFirstDigitalShow, m_nStopFirstDigitalShow);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CADStatusView, CFormView)
//{{AFX_MSG_MAP(CADStatusView)
ON_BN_CLICKED(IDC_CHECK_StopFirstDigitalShow, OnCHECKStopFirstDigitalShow)
ON_EN_CHANGE(IDC_EDIT_ScreenVolume, OnChangeEDITScreenVolume)
ON_EN_CHANGE(IDC_EDIT_TriggerVolt, OnChangeEDITTriggerVolt)
ON_BN_CLICKED(IDC_CHECK_CheckOverflow, OnCHECKCheckOverflow)
ON_BN_CLICKED(IDM_Check_DigitalShow, OnCheckDigitalShow)
ON_BN_CLICKED(IDM_Check_DataSave, OnCheckDataSave)
ON_BN_CLICKED(IDM_Check_GraphicShow, OnCheckGraphicShow)
ON_BN_CLICKED(IDC_CHECK_Bunch, OnCHECKBunch)
ON_BN_CLICKED(IDC_CHECK_BunchStop, OnCHECKBunchStop)
ON_BN_CLICKED(IDC_CHECK_Point, OnCHECKPoint)
ON_EN_CHANGE(IDC_EDIT_LowerLimit, OnChangeEDITLowerLimit)
ON_EN_CHANGE(IDC_EDIT_UpperLimit, OnChangeEDITUpperLimit)
ON_CBN_SELCHANGE(IDC_COMBO_IndexChannel, OnSelchangeCOMBOIndexChannel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CADStatusView diagnostics
#ifdef _DEBUG
void CADStatusView::AssertValid() const
{
CFormView::AssertValid();
}
void CADStatusView::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CADStatusView message handlers
void CADStatusView::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
CString str;
// TODO: Add your specialized code here and/or call the base class
str.Format("%d", m_ScreenVolume);
m_nScreenVolt.SetWindowText(str);
str.Format("%d", m_TriggerVolt);
m_nTringgerVolt.SetWindowText(str);
m_nMoveVolt.SetWindowText("0");
m_nAnalyzeCount.SetWindowText("0");
m_nOverRange.SetWindowText("0");//要返回的
m_nOverRatio.SetWindowText("0");//要返回的
// Volt_Range=1 ;//默认正负5伏量程
SetDlgCheck();
OnCHECKBunch();
Volt_Range=RANGE_N5000_TO_P5000;
//正负5伏
PerLsbVolt = (float)(10000.0/16384.0);
m_nLower=0;//串道下限
m_nUpper=16383;//串道上限
switch(m_DigitalDataShowMode)
{
case 0://十进制显示
str.Format("%d",m_nLower);
break;
case 1://十六进制显示
str.Format("%x",(WORD)m_nLower);
break;
case 2://电压显示
switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
{
case RANGE_N5000_TO_P5000:
str.Format("%4.2f",(m_nLower-8192)*(10000.0/16384));
break;
case RANGE_N10000_TO_P10000:
str.Format("%4.2f",(m_nLower-8192)*(20000.0/16384));
break;
case RANGE_0_TO_P5000:
str.Format("%4.2f",(m_nLower)*(5000.0/16384));
break;
case RANGE_0_TO_P2500:
str.Format("%4.2f",(m_nLower)*(2500.0/16384));
break;
}
break;
}
m_EDIT_Lower.SetWindowText(str);
switch(m_DigitalDataShowMode)
{
case 0://十进制显示
str.Format("%d",m_nUpper);
break;
case 1://十六进制显示
str.Format("%x",(WORD)m_nUpper);
break;
case 2://电压显示
switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
{
case RANGE_N5000_TO_P5000:
str.Format("%4.2f",(m_nUpper-8192)*(10000.0/16384));
break;
case RANGE_N10000_TO_P10000:
str.Format("%4.2f",(m_nUpper-8192)*(20000.0/16384));
break;
case RANGE_0_TO_P5000:
str.Format("%4.2f",(m_nUpper)*(5000.0/16384));
break;
case RANGE_0_TO_P2500:
str.Format("%4.2f",(m_nUpper)*(2500.0/16384));
break;
}
break;
}
m_EDIT_Upper.SetWindowText(str);
//----------------------------------------------------------------------------------------
while(m_COMBO_IndexChannel.GetCount())//清除原来串道分析索引
m_COMBO_IndexChannel.DeleteString(0);
for(int oldlast=0;oldlast< (int)ADPara.ChannelCount ;oldlast++)
{//制 串道分析索引
str.Format("%d",ADPara.ChannelArray[oldlast].ADChannel);
m_COMBO_IndexChannel.AddString(str);
}
m_COMBO_IndexChannel.SetCurSel(0);
//----------------------------------------------------------------------------------------
}
void CADStatusView::OnCHECKStopFirstDigitalShow()
{
// TODO: Add your control notification handler conde here
UpdateData(TRUE);
if(m_nStopFirstDigitalShow)
{
m_FirstScreenStop=true;
}
else
{
m_FirstScreenStop=false;
}
}
void CADStatusView::OnChangeEDITScreenVolume()//改变屏幕量程
{
// TODO: Add your control notification handler code here
CSysApp *pApp=(CSysApp *)AfxGetApp();
CADDoc* pDoc=pApp->m_pADDoc;
CString str;
m_nScreenVolt.GetWindowText(str);
m_ScreenVolume=strtol(str,NULL,10);
if(bFirstChangeTrigge==FALSE)
{
CADWaveView* pWaveView=(CADWaveView*)(CWnd::FromHandle(pDoc->m_hWndWave));
pWaveView->RedrawWindow();
}
bFirstChangeTrigge=FALSE; // 不是第一次操作这个CEdit框,说明这个框可以被操作
}
void CADStatusView::OnChangeEDITTriggerVolt() //改变触发电压的值
{
// TODO: Add your control notification handler code here
CString str;
m_nTringgerVolt.GetWindowText(str);
m_TriggerVolt=strtol(str,NULL,10);
// 当重新设置触发电平时,重置超限数和统计总数
m_OverLimitCount=0;
m_AnalyzeAllCount=0;
}
void CADStatusView::SetDlgCheck()
{
CButton* pCheck=(CButton*)GetDlgItem(IDM_Check_DigitalShow);
pCheck->SetCheck(nProcessMode==1?BST_CHECKED:BST_UNCHECKED);
pCheck->EnableWindow(m_bFirstCreateDeviceFile);
pCheck=(CButton*)GetDlgItem(IDM_Check_GraphicShow);
pCheck->SetCheck(nProcessMode==2?BST_CHECKED:BST_UNCHECKED);
pCheck->EnableWindow(m_bFirstCreateDeviceFile);
pCheck=(CButton*)GetDlgItem(IDM_Check_DataSave);
pCheck->SetCheck(nProcessMode==3?BST_CHECKED:BST_UNCHECKED);
pCheck->EnableWindow(!m_bFirstCreateDeviceFile);
}
void CADStatusView::OnCHECKCheckOverflow()
{
// TODO: Add your control notification handler code here
CButton* pCheck;
pCheck=(CButton*)GetDlgItem(IDC_CHECK_CheckOverflow);
bCheckOverflow = pCheck->GetCheck();
}
void CADStatusView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class
if(lHint==1||lHint==2) return;
CView::OnUpdate(pSender, lHint, pHint);
}
void CADStatusView::OnCheckDigitalShow()
{
// TODO: Add your control notification handler code here
nProcessMode=1;
m_bProgress=TRUE;
SetDlgCheck();
}
void CADStatusView::OnCheckDataSave()
{
// TODO: Add your control notification handler code here
nProcessMode=3;
SetDlgCheck();
}
void CADStatusView::OnCheckGraphicShow()
{
// TODO: Add your control notification handler code here
nProcessMode=2;
m_bProgress=FALSE;
SetDlgCheck();
}
void CADStatusView::OnCHECKBunch()
{
// TODO: Add your control notification handler code here
m_bBounce=m_CHECK_Bunch.GetCheck();
if(m_bBounce)
{
m_EDIT_BunchCount.EnableWindow(TRUE);
m_COMBO_IndexChannel.EnableWindow(TRUE);
m_EDIT_Lower.EnableWindow(TRUE);
m_EDIT_Upper.EnableWindow(TRUE);
m_CHECK_BunchStop.EnableWindow(TRUE);
m_CHECK_Points.EnableWindow(TRUE);
m_EDIT_BunchCount.SetWindowText("0");
m_nBounceNum=0;
}
else
{
m_EDIT_BunchCount.EnableWindow(FALSE);
m_COMBO_IndexChannel.EnableWindow(FALSE);
m_EDIT_Lower.EnableWindow(FALSE);
m_EDIT_Upper.EnableWindow(FALSE);
m_CHECK_BunchStop.EnableWindow(FALSE);
m_CHECK_Points.EnableWindow(FALSE);
}
}
void CADStatusView::OnChangeEDITUpperLimit()
{
// TODO: Add your control notification handler code here
CString str;
m_EDIT_Upper.GetWindowText(str);
switch(m_DigitalDataShowMode)
{
case 0://十进制显示
m_nUpper=(WORD)strtol(str,NULL,10);
break;
case 1://十六进制显示
m_nUpper=(WORD)strtol(str,NULL,16);
break;
case 2://电压显示
switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
{
case RANGE_N5000_TO_P5000:
m_nUpper=(short)((atof(str))*(16384/10000.0))+8192;
break;
case RANGE_N10000_TO_P10000:
m_nUpper=(short)((atof(str))*(16384/20000.0))+8192;
break;
case RANGE_0_TO_P5000:
m_nUpper=(short)((atof(str))*(16384/5000.0));
break;
case RANGE_0_TO_P2500:
m_nUpper=(short)((atof(str))*(16384/2500.0));
break;
}
break;
}
}
void CADStatusView::OnChangeEDITLowerLimit()
{
// TODO: Add your control notification handler code here
CString str;
m_EDIT_Lower.GetWindowText(str);
switch(m_DigitalDataShowMode)
{
case 0://十进制显示
m_nLower=(WORD)strtol(str,NULL,10);
break;
case 1://十六进制显示
m_nLower=(WORD)strtol(str,NULL,16);
break;
case 2://电压显示
switch(Volt_Range) //电压处理方式 1:正负5伏 2:正负10伏 3:0至5伏 4:0至2.5伏
{
case RANGE_N5000_TO_P5000:
m_nLower=(short)((atof(str))*(16384/10000.0))+8192;
break;
case RANGE_N10000_TO_P10000:
m_nLower=(short)((atof(str))*(16384/20000.0))+8192;
break;
case RANGE_0_TO_P5000:
m_nLower=(short)((atof(str))*(16384/5000.0));
break;
case RANGE_0_TO_P2500:
m_nLower=(short)((atof(str))*(16384/2500.0));
break;
}
break;
}
}
void CADStatusView::OnCHECKPoint()
{
// TODO: Add your control notification handler code here
m_bPointsAnalyze=m_CHECK_Points.GetCheck();
if(m_bPointsAnalyze)
{
int nChannelCount=ADPara.ChannelCount ;
m_nBouncePointsCount=(8192-8192%nChannelCount)/nChannelCount;//多点分析所需要的点数
}
else
{
m_nBouncePointsCount=1;
}
}
void CADStatusView::OnCHECKBunchStop()
{
// TODO: Add your control notification handler code here
m_BounceStop=m_CHECK_BunchStop.GetCheck();
}
void CADStatusView::OnSelchangeCOMBOIndexChannel()
{
// TODO: Add your control notification handler code here
m_nBounceChannel=m_COMBO_IndexChannel.GetCurSel();
CString str;
str.Format ("%d",m_nBounceChannel);
AfxMessageBox(str);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -