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

📄 datashowview.cpp

📁 CAN__组建现场总线系统设计技术(光盘)
💻 CPP
字号:
// DataShowView.cpp : implementation file
//

#include "stdafx.h"
#include "VCStyle.h"
#include "DataShowView.h"

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

#include "data.h"
/////////////////////////////////////////////////////////////////////////////
// CDataShowView

IMPLEMENT_DYNCREATE(CDataShowView, CFormView)

CDataShowView::CDataShowView()
	: CFormView(CDataShowView::IDD)
{
	//{{AFX_DATA_INIT(CDataShowView)
	m_max = 0.0;
	m_min = 0.0;
	m_sOutput = _T("");
	m_capmax1 = 0.0;
	m_capmax2 = 0.0;
	m_capmin1 = 0.0;
	m_capmin2 = 0.0;
	//}}AFX_DATA_INIT
	m_bSave = FALSE;
}

CDataShowView::~CDataShowView()
{
}

void CDataShowView::DoDataExchange(CDataExchange* pDX)
{
	CFormView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDataShowView)
	DDX_Control(pDX, IDC_BUTTON_SAVE, m_btnsave);
	DDX_Control(pDX, IDC_EDIT_OUTPUT, m_eOut);
	DDX_Control(pDX, IDC_LIST_DATA, m_list);
	DDX_Control(pDX, IDC_YGRAPHCTRL1, m_graph);
	DDX_Text(pDX, IDC_EDIT_MAX, m_max);
	DDX_Text(pDX, IDC_EDIT_MIN, m_min);
	DDX_Text(pDX, IDC_EDIT_OUTPUT, m_sOutput);
	DDX_Text(pDX, IDC_EDIT_MAX1, m_capmax1);
	DDX_Text(pDX, IDC_EDIT_MAX2, m_capmax2);
	DDX_Text(pDX, IDC_EDIT_MIN1, m_capmin1);
	DDX_Text(pDX, IDC_EDIT_MIN2, m_capmin2);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDataShowView, CFormView)
	//{{AFX_MSG_MAP(CDataShowView)
	ON_WM_CTLCOLOR()
	ON_MESSAGE(WM_RECEIVEFRAME,OnReceiveFrame)
	ON_BN_CLICKED(IDC_BUTTON_SET, OnButtonSet)
	ON_BN_CLICKED(IDC_BUTTON_SETCAPTURE, OnButtonSetcapture)
	ON_BN_CLICKED(IDC_BUTTON_SAVE, OnButtonSave)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDataShowView diagnostics

#ifdef _DEBUG
void CDataShowView::AssertValid() const
{
	CFormView::AssertValid();
}

void CDataShowView::Dump(CDumpContext& dc) const
{
	CFormView::Dump(dc);
}
#endif //_DEBUG
CDataShowDoc *CDataShowView::GetDocument ()  // non-debug version is inline
{
	ASSERT (m_pDocument->IsKindOf (RUNTIME_CLASS (CDataShowDoc)));

	return (CDataShowDoc *) m_pDocument;
}

/////////////////////////////////////////////////////////////////////////////
// CDataShowView message handlers

void CDataShowView::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();

	CDataShowDoc* pDoc = GetDocument();

	//set source
//	CDataShowDoc* pDoc = GetDocument();
	m_graph.SetStyle(12);
	m_graph.SetYMinMax(-1,1);
	m_graph.SetCurveParam(1,MAX_LEN);
	m_graph.SetData(0,&g_data[pDoc->m_addr][pDoc->m_ch][0]);

	//List
	m_list.InsertColumn(0,"值",LVCFMT_LEFT,100);
	m_list.InsertColumn(1,"真实值",LVCFMT_LEFT,80);
	m_list.InsertColumn(2,"误差",LVCFMT_LEFT,80);
	m_list.SetExtendedStyle(
		m_list.GetExtendedStyle()|
		LVS_EX_FULLROWSELECT|
		LVS_EX_GRIDLINES);
	m_list.SetBkColor(RGB(245,255,245));

	// TODO: Add your specialized code here and/or call the base class
	m_bkbrush.CreateSolidBrush(RGB(240,250,250));
}

HBRUSH CDataShowView::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
//	HBRUSH hbr = CFormView::OnCtlColor(pDC, pWnd, nCtlColor);
	
	// TODO: Change any attributes of the DC here
	
	// TODO: Return a different brush if the default is not desired
	return m_bkbrush;
}

LRESULT CDataShowView::OnReceiveFrame(WPARAM w,LPARAM l)
{
	CDataShowDoc* pDoc = GetDocument();
	if(g_data_new[pDoc->m_addr][pDoc->m_ch]){
		g_data_new[pDoc->m_addr][pDoc->m_ch] = FALSE;
		m_graph.Redraw();//更新历史曲线
		int nItem = m_list.GetItemCount();
		if(nItem >= 1000){//如果太多则删掉
			m_list.DeleteAllItems();
			nItem = 0;
		}
		double data = g_data[pDoc->m_addr][pDoc->m_ch][MAX_LEN-1];
		CString s;
		s.Format("%.3f",data);
		m_list.InsertItem(nItem,s);

		m_list.EnsureVisible(nItem,TRUE);

		//save
		if(m_bSave){
			m_file.SeekToEnd();
			CString t = s+'\t';
			m_file.Write(t,t.GetLength());
		}
		//是否超出正常范围
		if((data>=m_capmin1 && data<=m_capmax1) ||
			(data>=m_capmin2 && data<=m_capmax2)){
			CTime tm;
			tm = CTime::GetCurrentTime();
			s += tm.Format("\t%H时%M分%S秒\r\n");
			m_sOutput += s;
//			UpdateData(FALSE);
			m_eOut.SetWindowText(m_sOutput);
		}
	}

	return 0;
}


void CDataShowView::OnButtonSet() 
{
	UpdateData();
	m_graph.SetYMinMax(m_min,m_max);
	//

	m_graph.Redraw();
}

void CDataShowView::OnButtonSetcapture() 
{
	UpdateData();
}

void CDataShowView::OnButtonSave() 
{
	CString btntitle;
	m_btnsave.GetWindowText(btntitle);
	if( btntitle == _T("save") ){
		CFileDialog dlg(FALSE);
		if(dlg.DoModal() == IDOK){
			m_file.Open(dlg.GetPathName(),CFile::modeWrite|CFile::modeCreate);
			m_btnsave.SetWindowText("stop save");
			m_bSave = TRUE;
		}
	}
	else{
		m_btnsave.SetWindowText("save");
		m_bSave = FALSE;

		m_file.Close();
	}
}

⌨️ 快捷键说明

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