📄 testdlg.cpp
字号:
return;
if(VCI_StartCAN(m_devtype,m_devind,m_cannum)==1)
{
// ShowInfo("启动成功",0);
}
else
{
// CString str;
// str="启动失败";
// ShowInfo(str,2);
}
}
void CTestDlg::OnButtonResetcan()
{
// TODO: Add your control notification handler code here
if(m_connect==0)
return;
if(VCI_ResetCAN(m_devtype,m_devind,m_cannum)==1)
{
//GetDlgItem(IDC_BUTTON_STARTCAN)->EnableWindow(true);
ShowInfo("复位成功",0);
}
else
{
CString str;
str="复位失败";
ShowInfo(str,2);
}
}
void CTestDlg::OnButtonSend()
{
// TODO: Add your control notification handler code here
if(m_connect==0)
return;
VCI_CAN_OBJ frameinfo;
char szFrameID[9];
unsigned char FrameID[4]={0,0,0,0};
memset(szFrameID,'0',9);
unsigned char Data[8];
char szData[25];
BYTE datalen=0;
UpdateData(true);
if(m_EditSendFrmID.GetLength()==0||
(m_EditSendData.GetLength()==0&&m_ComboSendFrmType.GetCurSel()==0))
{
ShowInfo("请输入数据",1);
return;
}
if(m_EditSendFrmID.GetLength()>8)
{
ShowInfo("ID值超过范围",1);
return;
}
if(m_EditSendData.GetLength()>24)
{
ShowInfo("数据长度超过范围,最大为8个字节",1);
return;
}
if(m_ComboSendFrmType.GetCurSel()==0)
{
if(m_EditSendData.GetLength()%3==1)
{
ShowInfo("数据格式不对,请重新输入",1);
return;
}
}
memcpy(&szFrameID[8-m_EditSendFrmID.GetLength()],(LPCTSTR)m_EditSendFrmID,m_EditSendFrmID.GetLength());
strtodata((unsigned char*)szFrameID,FrameID,4,0);
datalen=(m_EditSendData.GetLength()+1)/3;
strcpy(szData,(LPCTSTR)m_EditSendData);
strtodata((unsigned char*)szData,Data,datalen,1);
UpdateData(false);
frameinfo.DataLen=datalen;
memcpy(&frameinfo.Data,Data,datalen);
frameinfo.RemoteFlag=m_ComboSendFrmFmt.GetCurSel();
frameinfo.ExternFlag=m_ComboSendFrmType.GetCurSel();
if(frameinfo.ExternFlag==1)
{
frameinfo.ID=((DWORD)FrameID[0]<<24)+((DWORD)FrameID[1]<<16)+((DWORD)FrameID[2]<<8)+
((DWORD)FrameID[3]);
}
else
{
frameinfo.ID=((DWORD)FrameID[2]<<8)+((DWORD)FrameID[3]);
}
frameinfo.SendType=m_ComboSendType.GetCurSel();
if(VCI_Transmit(m_devtype,m_devind,m_cannum,&frameinfo,1)==1)
{
ShowInfo("写入成功",0);
}
else
{
ShowInfo("写入失败",2);
}
}
void CTestDlg::ShowInfo(CString str, int code)
{
// ListCtr.InsertString(m_ListInfo.GetCount(),str);
// ListCtr.SetCurSel(m_ListInfo.GetCount()-1);
}
void CTestDlg::ShowDisplay()
{
// ListCtr.InsertString(m_ListInfo.GetCount(),str);
// ListCtr.SetCurSel(m_ListInfo.GetCount()-1);
(CButton *)GetDlgItem(IDC_BUTTON_SAVE)->EnableWindow(true);
//SetTimer(0,1000, NULL);
}
void CTestDlg::Sarttimer()
{
SetTimer(0,500,NULL);
}
void CTestDlg::Stoptimer()
{
KillTimer(0);
}
//-----------------------------------------------------
//参数:
//str:要转换的字符串
//data:储存转换过来的数据串
//len:数据长度
//函数功能:字符串转换为数据串
//-----------------------------------------------------
int CTestDlg::strtodata(unsigned char *str, unsigned char *data,int len,int flag)
{
unsigned char cTmp=0;
int i=0;
for(int j=0;j<len;j++)
{
if(chartoint(str[i++],&cTmp))
return 1;
data[j]=cTmp;
if(chartoint(str[i++],&cTmp))
return 1;
data[j]=(data[j]<<4)+cTmp;
if(flag==1)
i++;
}
return 0;
}
//-----------------------------------------------------
//参数:
//chr:要转换的字符
//cint:储存转换过来的数据
//函数功能:字符转换为数据
//-----------------------------------------------------
int CTestDlg::chartoint(unsigned char chr, unsigned char *cint)
{
unsigned char cTmp;
cTmp=chr-48;
if(cTmp>=0&&cTmp<=9)
{
*cint=cTmp;
return 0;
}
cTmp=chr-65;
if(cTmp>=0&&cTmp<=5)
{
*cint=(cTmp+10);
return 0;
}
cTmp=chr-97;
if(cTmp>=0&&cTmp<=5)
{
*cint=(cTmp+10);
return 0;
}
return 1;
}
UINT CTestDlg::ReceiveThread(void *param)
{
CTestDlg *dlg=(CTestDlg*)param;
CListCtrl *ListCtr1=(CListCtrl *)dlg->GetDlgItem(IDC_LIST1);
VCI_CAN_OBJ frameinfo[60];
VCI_ERR_INFO errinfo;
int len=1;
int i=0,k=0,m=0;
CString str,tmpstr,m_send_str;
CString temp_date;
unsigned char FristFrameF=0,ThirdFrameF=0, SecondFrameF=0,StartFrameF=0;
////////////////////////////////////////////////////////////
while(1)
{
Sleep(1);
if(dlg->m_connect==0)
break;
len=VCI_Receive(dlg->m_devtype,dlg->m_devind,dlg->m_cannum,frameinfo,60,50);
if(len<=0)
{
//注意:如果没有读到数据则必须调用此函数来读取出当前的错误码,
//千万不能省略这一步(即使你可能不想知道错误码是什么)
VCI_ReadErrInfo(dlg->m_devtype,dlg->m_devind,dlg->m_cannum,&errinfo);
}
else
{
dlg->Stoptimer();
for(i=0;i<len;i++)
{
if(frameinfo[i].RemoteFlag==0)
{
//str="数据:";
if(frameinfo[i].DataLen>8)
frameinfo[i].DataLen=8;
if (frameinfo[i].ID==0x200)
{
dlg->My_Re_Data.data_word.flagl_bit=frameinfo[i].Data[0];
dlg->My_Re_Data.data_word.paifen_time=frameinfo[i].Data[1];
dlg->My_Re_Data.data_word.skid_pa=((unsigned int)frameinfo[i].Data[3]<<8)+frameinfo[i].Data[2];
dlg->My_Re_Data.data_word.paifen_pa=((unsigned int)frameinfo[i].Data[5]<<8)+frameinfo[i].Data[4];
dlg->My_Re_Data.data_word.chongqi_time=((unsigned int)frameinfo[i].Data[7]<<8)+frameinfo[i].Data[6];
dlg->Receive_200f=true;
}
if (frameinfo[i].ID==0x300)
{
dlg->My_Re_Data.data_word.lieche_pa=((unsigned int)frameinfo[i].Data[1]<<8)+frameinfo[i].Data[0];
dlg->Receive_300f=true;
}
EnterCriticalSection(&(dlg->m_Section));
LeaveCriticalSection(&(dlg->m_Section));
if(dlg->Receive_200f&&dlg->Receive_300f)
{
dlg->Receive_200f=false;
dlg->Receive_300f=false;
///////////////////////////////////
size.cy+=1;
size.cx=0;
InsertCount=ListCtr1->GetItemCount();
//xianshi
m_send_str=_T("");
ListCtr1->InsertItem(InsertCount,m_send_str);
m_send_str.Format("%02d",InsertCount);
ListCtr1->SetItemText(InsertCount,0,m_send_str);
m_send_str.Format("%02d",dlg->My_Re_Data.all_data[1]);
ListCtr1->SetItemText(InsertCount,1,m_send_str);
m_send_str.Format("%02d",dlg->My_Re_Data.all_data[3]);
ListCtr1->SetItemText(InsertCount,2,m_send_str);
m_send_str.Format("%02d",dlg->My_Re_Data.all_data[2]);
ListCtr1->SetItemText(InsertCount,3,m_send_str);
m_send_str.Format("%02d",dlg->My_Re_Data.all_data[5]);
ListCtr1->SetItemText(InsertCount,4,m_send_str);
m_send_str.Format("%02d",dlg->My_Re_Data.all_data[4]);
ListCtr1->SetItemText(InsertCount,5,m_send_str);
m_send_str.Format("%02x",dlg->My_Re_Data.all_data[0]);
ListCtr1->SetItemText(InsertCount,6,m_send_str);
ListCtr1->Scroll(size);
InsertCount+=1;
RecordCounter+=1;
}
}
}
//box->SetCurSel(box->GetCount()-1);
dlg->Sarttimer();
}
}
return 0;
}
void CTestDlg::OnMenuRefresh()
{
// TODO: Add your command handler code here
}
void CTestDlg::OnButtonNew()
{
// TODO: Add your control notification handler code here
ListCtr.DeleteAllItems();
InsertCount=0;
RecordCounter=0;
RecordStartIndex=0;
SavleFlag=0;
//(CButton *)GetDlgItem(IDC_BUTTON_SAVE)->EnableWindow(false);
this->KillTimer(0);
}
void CTestDlg::OnButtonSave()
{
// TODO: Add your control notification handler code here
/////////////////////////////////////////////
CRecordFile ReFile;
CString my_rename;//888
//获取当前时间
//COleDateTime CurrTime;
if(RecordCounter==0)
{
MessageBox("无记录!!","提示");
return;
//m_SaveBut1->EnableWindow(false);
}
CString temstr;
CFileDialog dlg(false,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"TXT(*.TXT*)|*.TXT*|AllFile(*.*)|*.*||",NULL);//.LWH
if(dlg.DoModal()==IDOK)
{
strFPath=dlg.GetPathName();
strFName=dlg.GetFileName();
if (strFPath.Right(4)==".txt")
{
my_rename=strFPath;
}
else
my_rename=strFPath+".txt";
//创建保存文件
//ReFile.fnCreateCaseFile(my_rename);
//保存记录信息
WriteRecoreFile(my_rename);
SavleFlag=1;
MessageBox("记录已经保存成功!!","提示");
}//end if
UpdateData(false);
// }
}
void CTestDlg::OnButtonStart()
{
// TODO: Add your control notification handler code here
/* CSize endsize;
DWORD iItem; COLORREF color;
UINT Flag= LVIS_SELECTED|LVIS_FOCUSED;
ListCtr.SetItemState(RecordStartIndex,Flag,Flag);
endsize.cy=-(size.cy-temsize.cy)*2;
endsize.cx=0;
ListCtr.Scroll(endsize);
ListCtr.SetFocus();
iItem=RecordStartIndex;
color=(DWORD)RGB(255,0,0);
Mylist.GetDlgItem(IDC_LIST1);
Mylist.SetItemColor(iItem,color);
UpdateWindow();*/
}
void CTestDlg::OnButtonLoad()
{
// TODO: Add your control notification handler code here
//cLoadRecord->ShowWindow(SW_SHOWNA);
cLoadRecord.DoModal();
//cLoadRecord.Create(IDD_DIALOG1,this);
//cLoadRecord.ShowWindow(SW_SHOW);
}
void CTestDlg::WriteRecoreFile(CString filename)
{
//获取当前时间
COleDateTime CurrTime;
CurrTime=COleDateTime::GetCurrentTime();
//写文件 //保存直接处理。
CRecordFile ReFile;
CString pathfile=filename;
CFile file1;
CFileException e;
if(!file1.Open(pathfile,CFile::modeCreate|CFile::modeWrite|CFile::modeRead,&e))
{
// e.ReportError();
// return;
CFile file2(pathfile,CFile::modeCreate|CFile::modeWrite);
file1.m_hFile=file2.m_hFile;
}
int i=0,j=0;
CArchive ar(&file1,CArchive::store);
int Count=ListCtr.GetItemCount();
CString strtemp[14],strtime;
if(ar.IsStoring())
{
ar<<Count;
while(Count>i)
{
for(j=0;j<7;j++)
{
strtemp[j]=ListCtr.GetItemText(i,j);
ar<<strtemp[j];
}
i++;
}
strtime="";
strtime.Format("%0d-%0d-%d",CurrTime.GetYear(),CurrTime.GetMonth(),CurrTime.GetDay());
ar<<strtime;
strtime.Format("%0d:%0d:%d",CurrTime.GetHour(),CurrTime.GetMinute(),CurrTime.GetSecond());
ar<<strtime;
}
ar.Close();
file1.Close();
return ;
}
void CTestDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if (nIDEvent==0)
{
//ShowDisplay();
}
CDialog::OnTimer(nIDEvent);
}
HBRUSH CTestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
if((pWnd->GetDlgCtrlID()==IDC_COMPY)||(pWnd->GetDlgCtrlID()==IDC_SOFTNAME)||(pWnd->GetDlgCtrlID()==IDC_DATE))
{
//pDC->SetBkMode(OPAQUE);
//pDC->SetBkColor(RGB(0XE8,0XE8,0x29));
pDC->SetTextColor(RGB ( 0x44,0x44,0xbb));
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -