📄 dataframe.cpp
字号:
// DataFrame.cpp : implementation file
//
#include "stdafx.h"
#include "VcDemo.h"
#include "DataFrame.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDataFrame dialog
CDataFrame::CDataFrame(CWnd* pParent /*=NULL*/)
: CDialog(CDataFrame::IDD, pParent)
{
//{{AFX_DATA_INIT(CDataFrame)
m_intLoopNum = 0;
m_intFrameNum = 0;
m_intDataNum = 0;
m_strFrame = _T("");
m_strID0 = _T("");
m_strID1 = _T("");
m_Data2 = _T("");
m_Data3 = _T("");
m_Data4 = _T("");
m_Data5 = _T("");
m_Data6 = _T("");
m_Data7 = _T("");
m_Data1 = _T("");
m_Data0 = _T("");
m_index = 0;
m_strID2 = _T("");
m_strID3 = _T("");
//}}AFX_DATA_INIT
m_setPacketNum = 0x0;
// 设置工作模式
m_workMode = 0x0;
}
void CDataFrame::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDataFrame)
DDX_Control(pDX, IDC_CmbFrame, m_cmbFrame);
DDX_Text(pDX, IDC_EdtLoopNum, m_intLoopNum);
DDV_MinMaxInt(pDX, m_intLoopNum, 1, 10);
DDX_Text(pDX, IDC_EdtFrameNum, m_intFrameNum);
DDV_MinMaxInt(pDX, m_intFrameNum, 1, 10);
DDX_Text(pDX, IDC_EdtDataNum, m_intDataNum);
DDV_MinMaxInt(pDX, m_intDataNum, 0, 8);
DDX_CBString(pDX, IDC_CmbFrame, m_strFrame);
DDX_Text(pDX, IDC_EdtID0, m_strID0);
DDV_MaxChars(pDX, m_strID0, 2);
DDX_Text(pDX, IDC_EdtID1, m_strID1);
DDV_MaxChars(pDX, m_strID1, 2);
DDX_Text(pDX, IDC_EdtData2, m_Data2);
DDV_MaxChars(pDX, m_Data2, 2);
DDX_Text(pDX, IDC_EdtData3, m_Data3);
DDV_MaxChars(pDX, m_Data3, 2);
DDX_Text(pDX, IDC_EdtData4, m_Data4);
DDV_MaxChars(pDX, m_Data4, 2);
DDX_Text(pDX, IDC_EdtData5, m_Data5);
DDV_MaxChars(pDX, m_Data5, 2);
DDX_Text(pDX, IDC_EdtData6, m_Data6);
DDV_MaxChars(pDX, m_Data6, 2);
DDX_Text(pDX, IDC_EdtData7, m_Data7);
DDV_MaxChars(pDX, m_Data7, 2);
DDX_Text(pDX, IDC_EdtData1, m_Data1);
DDV_MaxChars(pDX, m_Data1, 2);
DDX_Text(pDX, IDC_EdtData0, m_Data0);
DDV_MaxChars(pDX, m_Data0, 2);
DDX_Text(pDX, IDC_EdtIndex, m_index);
DDX_Text(pDX, IDC_EdtID2, m_strID2);
DDX_Text(pDX, IDC_EdtID3, m_strID3);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDataFrame, CDialog)
//{{AFX_MSG_MAP(CDataFrame)
ON_BN_CLICKED(IDC_BtnDown, OnBtnDown)
ON_BN_CLICKED(IDC_BtnUp, OnBtnUp)
ON_CBN_SELCHANGE(IDC_CmbFrame, OnSelchangeCmbFrame)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// MultiplyXY
unsigned long MultiplyXY(unsigned long xx, unsigned int yy)
{
unsigned int loopX;
unsigned long retValue = 0;
retValue = xx;
if(yy <= 0)
{
return 1;
}
if(yy == 1)
{
return retValue;
}
for(loopX = 0; loopX < yy - 1; loopX++)
{
retValue *= xx;
}
return retValue;
}
// Function defined by ourself
// 实现字符串到十六进制数据的转换
unsigned long StringToHex(CString xx)
{
unsigned long hexX,hexY;
unsigned char ascNum;
unsigned int len;
unsigned int loopNum;
len = xx.GetLength();
hexX = 0;
hexY = 0;
for(loopNum = 0; loopNum < len; loopNum++)
{
ascNum = xx.GetAt(loopNum);
if((ascNum >= 0x30) && (ascNum <= 0x39))
{
hexX = (ascNum - 0x30) * MultiplyXY(16,(len - loopNum - 1));
hexY += hexX;
}
else if((ascNum >= 0x41) && (ascNum <= 0x46))
{
hexX = (10 + ascNum - 0x41) * MultiplyXY(16,(len - loopNum - 1));
hexY += hexX;
}
else if((ascNum >= 0x61) && (ascNum <= 0x66))
{
hexX = (10 + ascNum - 0x61) * MultiplyXY(16,(len - loopNum - 1));
hexY += hexX;
}
}
return hexY;
}
// 实现数据到字符串的转换
CString CDataFrame::HexToString(unsigned long xx)
{
CString yy;
yy.Format("%s%x", yy, xx);
return yy;
}
// 实现数据到字符串的转换
CString CDataFrame::HexToString2(unsigned char xx)
{
CString yy;
yy.Format("%s%x", yy, xx);
if(yy.GetLength() < 2)
{
if(yy.GetLength() == 1)
{
yy.Insert(0,"0");
}
}
return yy;
}
// 实现数据到字符串的转换
CString CDataFrame::HexToString4(unsigned long xx)
{
CString yy;
yy.Format("%s%x", yy, xx);
if(yy.GetLength() < 8)
{
if(yy.GetLength() == 1)
{
yy.Insert(0,"0000000");
}
else if(yy.GetLength() == 2)
{
yy.Insert(0,"000000");
}
else if(yy.GetLength() == 3)
{
yy.Insert(0,"00000");
}
else if(yy.GetLength() == 4)
{
yy.Insert(0,"0000");
}
else if(yy.GetLength() == 5)
{
yy.Insert(0,"000");
}
else if(yy.GetLength() == 6)
{
yy.Insert(0,"00");
}
if(yy.GetLength() == 7)
{
yy.Insert(0,"0");
}
}
return yy;
}
/////////////////////////////////////////////////////////////////////////////
// CDataFrame message handlers
BOOL CDataFrame::OnInitDialog()
{
CDialog::OnInitDialog();
CString ID;
// TODO: Add your specialized creation code here
// 数据索引
m_index = 1;
CEdit* pLY;
if(m_workMode)
{
// Extend Frame
// show low two ACR
pLY = (CEdit*)GetDlgItem(IDC_EdtID0);
pLY->ShowWindow(SW_SHOW);
pLY = (CEdit*)GetDlgItem(IDC_EdtID1);
pLY->ShowWindow(SW_SHOW);
}
else
{
// Standard Frame
// hide low two ACR
pLY = (CEdit*)GetDlgItem(IDC_EdtID0);
pLY->ShowWindow(SW_HIDE);
pLY = (CEdit*)GetDlgItem(IDC_EdtID1);
pLY->ShowWindow(SW_HIDE);
}
// 从已经保存的数据结构中取数
if(m_setPacketNum > 0)
{
// DATA frame
if(ptrPacket[m_index - 1].rtr <= 0)
{
m_cmbFrame.SetCurSel(0);
}
else
{
m_cmbFrame.SetCurSel(1);
}
// ID(从十六进制转换为字符串)
if(m_workMode)
{
ID = HexToString4(ptrPacket[m_index-1].CAN_ID * MultiplyXY(2,3));
}
else
{
ID = HexToString4(ptrPacket[m_index-1].CAN_ID * MultiplyXY(2,5));
}
m_strID3 = ID.Mid(0,2);
m_strID2 = ID.Mid(2,2);
m_strID1 = ID.Mid(4,2);
m_strID0 = ID.Mid(6,2);
// DATA length
if(ptrPacket[m_index].length >8)
{
ptrPacket[m_index].length = 0x08;
}
m_intDataNum = ptrPacket[m_index].length;
// DATA
m_Data0 = HexToString2(ptrPacket[m_index-1].data[0]);
m_Data1 = HexToString2(ptrPacket[m_index-1].data[1]);
m_Data2 = HexToString2(ptrPacket[m_index-1].data[2]);
m_Data3 = HexToString2(ptrPacket[m_index-1].data[3]);
m_Data4 = HexToString2(ptrPacket[m_index-1].data[4]);
m_Data5 = HexToString2(ptrPacket[m_index-1].data[5]);
m_Data6 = HexToString2(ptrPacket[m_index-1].data[6]);
m_Data7 = HexToString2(ptrPacket[m_index-1].data[7]);
}
else
// 设置新的默认值
{
// 显示正在设置的帧的索引
m_index = 1;
m_intLoopNum = 1;
m_intFrameNum = 1;
m_intDataNum = 8;
// Frame Type
CComboBox* pLX;
pLX = (CComboBox*) GetDlgItem(IDC_CmbFrame);
pLX->Clear();
pLX->InsertString(-1,"数据帧");
pLX->InsertString(-1, "远程帧");
m_strFrame = "数据帧";
m_strID0 = "00";
m_strID1 = "00";
m_strID2 = "00";
m_strID3 = "00";
m_Data0 = "00";
m_Data1 = "00";
m_Data2 = "00";
m_Data3 = "00";
m_Data4 = "00";
m_Data5 = "00";
m_Data6 = "00";
m_Data7 = "00";
}
UpdateData(FALSE);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -