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

📄 testdlg.cpp

📁 一个给铁路机车系统采集排气
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		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 + -