📄 readcompassview.cpp
字号:
// ReadCompassView.cpp : implementation of the CReadCompassView class
//
#include "stdafx.h"
#include "ReadCompass.h"
#include "ReadCompassSet.h"
#include "ReadCompassDoc.h"
#include "ReadCompassView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CReadCompassView
double m_heading[2000];
int m_num = 0;
IMPLEMENT_DYNCREATE(CReadCompassView, CRecordView)
BEGIN_MESSAGE_MAP(CReadCompassView, CRecordView)
//{{AFX_MSG_MAP(CReadCompassView)
ON_BN_CLICKED(IDC_BUTTON_CLEAR, OnClear)
ON_BN_CLICKED(IDC_BUTTON_STOP, OnStop)
ON_BN_CLICKED(IDC_SEND, OnSend)
ON_BN_CLICKED(IDC_CHECK_AUTOSEND, OnCheckAutosend)
ON_BN_CLICKED(IDC_OK, OnOk)
ON_CBN_SELCHANGE(IDC_COMBO, OnSelchangeCombo)
ON_WM_TIMER()
ON_BN_CLICKED(IDC_BUTTON_SENDFILE, OnButtonSendfile)
ON_BN_CLICKED(IDC_BUTTON_FILEBROWER, OnButtonFilebrower)
ON_BN_CLICKED(IDC_OK4, OnOk2)
ON_BN_CLICKED(IDC_OK2, OnOk3)
ON_BN_CLICKED(IDC_OK3, OnOk4)
ON_CBN_SELCHANGE(IDC_COMBOMONI, OnSelchangeCombomoni)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CReadCompassView construction/destruction
CReadCompassView::CReadCompassView()
: CRecordView(CReadCompassView::IDD)
{
//{{AFX_DATA_INIT(CReadCompassView)
m_pSet = NULL;
m_bAutoSend = FALSE;
m_ComSetting = _T("9600,n,8,1");
m_strRXData = _T("");
m_strTXData = _T("");
m_Time = 1000;
m_strSendFilePathName = _T("");
//}}AFX_DATA_INIT
// TODO: add construction code here
bReceive = FALSE;
m_bSendFile = FALSE;
m_nInputMode = 1;
m_nMoni = 0;
m_strSendFilePathName="还没有选择文件";//"No File Selected!";
m_strCurPath="C:\\COMDATA";
m_nFileLength=0;
}
CReadCompassView::~CReadCompassView()
{
}
void CReadCompassView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CReadCompassView)
DDX_Control(pDX, IDC_COMBOMONI, m_ctrlMoni);
DDX_Control(pDX, IDC_STATIC_OPENOFF8, m_ctrlIconOpenoff8);
DDX_Control(pDX, IDC_STATIC_OPENOFF7, m_ctrlIconOpenoff7);
DDX_Control(pDX, IDC_STATIC_OPENOFF6, m_ctrlIconOpenoff6);
DDX_Control(pDX, IDC_STATIC_OPENOFF5, m_ctrlIconOpenoff5);
DDX_Control(pDX, IDC_STATIC_OPENOFF4, m_ctrlIconOpenoff4);
DDX_Control(pDX, IDC_STATIC_OPENOFF3, m_ctrlIconOpenoff3);
DDX_Control(pDX, IDC_STATIC_OPENOFF2, m_ctrlIconOpenoff2);
DDX_Control(pDX, IDC_STATIC_OPENOFF1, m_ctrlIconOpenoff1);
DDX_Control(pDX, IDC_BUTTON_SENDFILE, m_ctrlSendFile);
DDX_Control(pDX, IDC_EDIT_SENDFILE, m_ctrlEditSendFile);
DDX_Control(pDX, IDC_COMBO, m_ctrlDataType);
DDX_Control(pDX, IDC_CHECK_HEXDISPLAY, m_ctrlHexDisplay);
DDX_Control(pDX, IDC_BUTTON_STOP, m_ctrlReceive);
DDX_Check(pDX, IDC_CHECK_AUTOSEND, m_bAutoSend);
DDX_Text(pDX, IDC_COMSETTING, m_ComSetting);
DDX_Text(pDX, IDC_EDIT_REC1, m_strRXData);
DDX_Text(pDX, IDC_EDIT_SEND1, m_strTXData);
DDX_Control(pDX, IDC_MSCOMM1, m_ctrlComm);
DDX_Text(pDX, IDC_TIME, m_Time);
DDX_Text(pDX, IDC_EDIT_SENDFILE, m_strSendFilePathName);
DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_temperature, m_pSet);
//}}AFX_DATA_MAP
}
BOOL CReadCompassView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CRecordView::PreCreateWindow(cs);
}
void CReadCompassView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_readCompassSet;
CRecordView::OnInitialUpdate();
ResizeParentToFit();
}
/////////////////////////////////////////////////////////////////////////////
// CReadCompassView printing
BOOL CReadCompassView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CReadCompassView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CReadCompassView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CReadCompassView diagnostics
#ifdef _DEBUG
void CReadCompassView::AssertValid() const
{
CRecordView::AssertValid();
}
void CReadCompassView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
CReadCompassDoc* CReadCompassView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CReadCompassDoc)));
return (CReadCompassDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CReadCompassView database support
CRecordset* CReadCompassView::OnGetRecordset()
{
return m_pSet;
}
/////////////////////////////////////////////////////////////////////////////
// CReadCompassView message handlers
BEGIN_EVENTSINK_MAP(CReadCompassView, CRecordView)
//{{AFX_EVENTSINK_MAP(CReadCompassView)
ON_EVENT(CReadCompassView, IDC_MSCOMM1, 1 /* OnComm */, OnOnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
void CReadCompassView::OnOnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;//COleSafeArray操作任意类型任意维数的数组
LONG len,k;
int i=0;
double q;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;//,m_strRXData1;//,m_strRXData2;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
// Sleep(50);
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度//返回一维COleSafeArray对象中的元素数
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
if(m_ctrlHexDisplay.GetCheck())
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
UpdateData(FALSE);
}
if("30 03" == m_strRXData.Mid(0,5))
{
for(i=0;i<len;i+=6)
{
if(!m_pSet->IsEOF())
m_pSet->MoveLast();////////
m_pSet->AddNew();
UpdateData(TRUE);
char tbuf1[10];
double tbuf2[10];
CString strTemp1;
strTemp1 =m_strRXData.Mid(i*17+6,5);
char *temp1= (char*) ((LPCSTR)strTemp1);
tbuf1[0]=temp1[0];
tbuf1[1]=temp1[1];
tbuf1[2]=temp1[3];
tbuf1[3]=temp1[4];
tbuf2[0]=ConvertHexChar(tbuf1[3]);
tbuf2[1]=16*ConvertHexChar(tbuf1[2]);
tbuf2[2]=256*ConvertHexChar(tbuf1[1]);
tbuf2[3]=256*16*ConvertHexChar(tbuf1[0]);
q=tbuf2[0]+tbuf2[1]+tbuf2[2]+tbuf2[3];
q=2.5*q/1024;
m_pSet->m_temperature=strTemp1;
char *temp2= tbuf1;
m_heading[m_num]=(atoi(temp2)/10.0);
m_pSet->m_number++;
UpdateData(FALSE);
if (m_pSet->CanUpdate())
{
if(!m_pSet->Update())
AfxMessageBox(_T("增加新记录失败!"));
}
if(!m_pSet->IsEOF())
{
m_pSet->MoveLast();
}
m_num++;
CReadCompassDoc *pDoc=GetDocument();////每来一个中断激发一次重画
pDoc->UpdateAllViews(NULL);
}
}
}
UpdateData(FALSE); //更新编辑框内容
}
/*
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
double q;
int i=0;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp,strtemp1;
if(bReceive)
{
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
if(len<7)
{
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
if(m_ctrlHexDisplay.GetCheck())
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
else
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
strtemp1=m_strRXData.Mid(i*17,2);
if(strtemp1=="30")
{
strtemp1=m_strRXData.Mid(i*17+6,5);
if(m_strRXData.GetLength() >= 200)
m_strRXData.Empty();
UpdateData(FALSE);
if(!m_pSet->IsEOF())
m_pSet->MoveLast();
m_pSet->AddNew();
UpdateData(TRUE);
char tbuf1[10];
double tbuf2[10];
char *temp1= (char*) ((LPCSTR)strtemp1);
tbuf1[3]=temp1[0];
tbuf1[2]=temp1[1];
tbuf1[1]=temp1[3];
tbuf1[0]=temp1[4];
tbuf2[0]=ConvertHexChar(tbuf1[0]);
tbuf2[1]=16*ConvertHexChar(tbuf1[1]);
tbuf2[2]=256*ConvertHexChar(tbuf1[2]);
tbuf2[3]=256*16*ConvertHexChar(tbuf1[3]);
q=tbuf2[0]+tbuf2[1]+tbuf2[2]+tbuf2[3];
// q=2.5*q/1024;
m_pSet->m_temperature=CString(tbuf2[0]+tbuf2[1]+tbuf2[2]+tbuf2[3]);
m_heading[0] = 10.2;
m_pSet->m_number++;
UpdateData(FALSE);
if (m_pSet->CanUpdate())
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -