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

📄 调试dlg.cpp

📁 用串口通讯工具
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	 //int nLen = m_edit_Cstr_indata.GetLength();
	 //m_edit_Cctrl_indata.SetSel(nLen,nLen);
	 //m_bDataNoError = TRUE;
     m_bDataNoError = PackSendData(); 
}

void CMyDlg::OnCheckSendConver() 
{
     //if(!m_bDataNoError)m_edit_Cctrl_indata.SetSel(0,m_edit_Cstr_indata.GetLength());
	 //m_bDataNoError = TRUE;
  	 m_bDataNoError = PackSendData();
	
}

bool CMyDlg::PackSendData(void)
{
	 int nLen,i,error;
	 UpdateData(1);
	 oleData.Clear();
	 CString strInData = m_edit_Cstr_indata;
	 if(m_check_send_conver)
	 {
		 error = CheckHexData(strInData);
		 switch(error)
		 {
		 case 0: oleData = SendHexData; return TRUE; //no error
		 case 1: MessageBox("部分数据不正确","警告",MB_OK);return FALSE;//
		 case 2: MessageBox("部分数据超出允许范围(0 — ff)","警告",MB_OK);return FALSE;//
		 }
		 
	 }
	 else
	 {
		 nLen = m_edit_Cstr_indata.GetLength();
		 SendCharData.SetSize(1000);
		 for(i=0;i<nLen;i++)
			 SendCharData[i] = m_edit_Cstr_indata[i];
		 SendCharData.SetSize(i);
		 oleData = SendCharData;
	 }
	 return TRUE;

}

int  CMyDlg::CheckHexData(CString strInData)
{
	 int i,k=0,nLen,error=0;
	 //CString strInData = m_edit_Cstr_indata;
	 nLen = strInData.GetLength();
	 if(nLen == 0)return 3;
	 SendHexData.SetSize(5000);
	 char hdata,ldata;
	 for(i=0;i<nLen;i+=2)
	 {
		 if(strInData[i] != ' ')
		 {
			 if((hdata = ToHexChar(strInData[i])) != -1)
			 {
				 if((i+1) < nLen)
				 {
					 if((ldata = ToHexChar(strInData[i+1])) != -1)
					 {
						 if((i+2) < nLen)
					 	{
						 	if(strInData[i+2] != ' ' )
							{
								m_edit_Cctrl_indata.SetSel(i,i+3);
								return 2; //the data is beyond of rang
							}
						 	else SendHexData[k++] = (hdata*16 + ldata);
						 }
					 	else SendHexData[k++] = (hdata*16 + ldata);
				 	}
				 	else if(strInData[i+1] == ' ')SendHexData[k++] = hdata;
			     	else 
					{
                        m_edit_Cctrl_indata.SetSel(i,i+2);
						return 1;
					}
			 	}
				 else SendHexData[k++] = hdata;
		 	}
		 	else 
			{
				m_edit_Cctrl_indata.SetSel(i,i+3);
				return 1;//Can not conver to hex char 
			}
	 	}
		else i-=1;
	 }
	 SendHexData.SetSize(k);
	 return 0; //no error        
}
char CMyDlg::ToHexChar(char ch)
{
	 if((ch>='0')&&(ch<='9'))
	 return ch-0x30;
	 else if((ch>='A')&&(ch<='F'))
	 return ch-'A'+10;
	 else if((ch>='a')&&(ch<='f'))
	 return ch-'a'+10;
	 else return (-1);
}




void CMyDlg::OnButton1() //send data button click
{
	 CByteArray DisData;
	 CString strBuf;
	 int nLen;
	 UpdateData(1);
	 if(m_bDataNoError && m_check_open_port)
	 {

         if(m_check_local_dis)
	     {
             if(m_check_send_conver) DisData.Copy(SendHexData);
		     else DisData.Copy(SendCharData);	
	         int conver_sel = m_combo_Cctrl_converdata.GetCurSel();
	         nLen = DisData.GetSize();
	       	 for(int i=0;i<nLen;i++)
		     {
		    	switch(conver_sel)
		    	{
		    	case 0: strBuf.Format("%c",DisData[i]);break;
		    	case 1: strBuf.Format("%02x ",DisData[i]);break;
		    	case 2: strBuf.Format("%02d ",DisData[i]);break;
		    	case 3: strBuf.Format("%02o ",DisData[i]);break;
		    	}
		        m_edit_Cstr_disdata += strBuf;
		     }
			 if(m_check_clean)
					   if(m_edit_Cctrl_disdata.GetLineCount() > 18) m_edit_Cstr_disdata = "";
	     }
	     m_mscomm_Cctrl_com.SetOutput(oleData);  
	 }
	 else 
	 {
		 if(m_check_auto_send)CMyDlg::OnCheckAutoSend(); 
		 if(m_edit_Cstr_indata.GetLength()==0)MessageBox("您没有输入任何数据","输入",MB_OK);
		 else if(!m_check_open_port)MessageBox("请选择端口并启用","设置",MB_OK);
		 else MessageBox("您输入的数据有误,暂时未能发送!","对不起",MB_OK);
		 
	 }
	 UpdateData(0);
	 //m_edit_Cctrl_disdata.LineScroll(m_edit_Cctrl_disdata.GetLineCount(),0);

}



void CMyDlg::OnTimer(UINT nIDEvent) 
{
	CMyDlg::OnButton1();  //auto send;
	CDialog::OnTimer(nIDEvent);
}

void CMyDlg::OnCheckAutoSend() 
{
	m_check_auto_send = !m_check_auto_send;
     if(m_check_auto_send)
	 {
		 CMyDlg::SetTimer(1,m_lSendTime,NULL);
	 }
	 else CMyDlg::KillTimer(1);
}

void CMyDlg::OnChangeEditSendCircle() 
{
	 UpdateData(1);
     m_lSendTime = atol(m_edit_Cstr_sendcircle);
	
}

bool CMyDlg::SetPortPara(void)
{
	 m_strPortParameter = m_combo_Cstr_rate + "," +m_strCheckBit + "," +
		                  m_combo_Cstr_databit + "," +m_combo_Cstr_stopbit;
	 return TRUE;
}

void CMyDlg::OnSelchangeComboSeleRate() 
{
	UpdateData(1);
	SetPortPara();
	if(m_check_open_port)
	{
		m_mscomm_Cctrl_com.SetPortOpen(0);
		m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);
		m_mscomm_Cctrl_com.SetPortOpen(1);
	}
	else m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);	
}

void CMyDlg::OnSelchangeComboSeleDatabit() 
{
	UpdateData(1);
	SetPortPara();
	if(m_check_open_port)
	{
		m_mscomm_Cctrl_com.SetPortOpen(0);
		m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);
		m_mscomm_Cctrl_com.SetPortOpen(1);
	}
	else m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);	
}

void CMyDlg::OnSelchangeComboSeleStopbit() 
{
	UpdateData(1);
	SetPortPara();
	if(m_check_open_port)
	{
		m_mscomm_Cctrl_com.SetPortOpen(0);
		m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);
		m_mscomm_Cctrl_com.SetPortOpen(1);
	}
	else m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);	
}

void CMyDlg::OnSelchangeComboSeleCheckbit() 
{
    switch(m_combo_Cctrl_checkbit.GetCurSel())
	{
	case 0: m_strCheckBit = "n";break;
	case 1: m_strCheckBit = "o";break;
	case 2: m_strCheckBit = "e";break;
	}
	UpdateData(1);
	SetPortPara();
	if(m_check_open_port)
	{
		m_mscomm_Cctrl_com.SetPortOpen(0);
		m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);
		m_mscomm_Cctrl_com.SetPortOpen(1);
	}
	else m_mscomm_Cctrl_com.SetSettings(m_strPortParameter);
	
}

void CMyDlg::OnButtonview() 
{
     CFileDialog filedlg(FALSE,NULL,"*.txt",NULL,NULL,NULL);
	 if(filedlg.DoModal() == IDOK)
	 {
		 MessageBox(filedlg.GetPathName(),"open",MB_OK);
		 CMyDlg::m_strFilePath = filedlg.GetPathName();
	 }
	
}

void CMyDlg::OnButtonSaveData() 
{
	 UpdateData(1);
	 CFile file;
	 CFileException ex;
	 CString strData;
     strData = WriteTime();
     strData += CMyDlg::m_edit_Cstr_disdata;
	 if(CMyDlg::m_strFilePath.GetLength() == 0)CMyDlg::OnButtonview();
	 if(CMyDlg::m_strFilePath.GetLength() != 0)
	 {
		 if(CMyDlg::m_edit_Cctrl_disdata.GetModify())
		 {
		     file.Open(CMyDlg::m_strFilePath,CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite,&ex);
	         file.Seek(file.GetLength(),CFile::begin);
		     file.Write(strData,strData.GetLength());
	         file.Close();
			 CMyDlg::m_edit_Cctrl_disdata.SetModify(0);
		 }
	 }
	 UpdateData(0);
	
}

CString CMyDlg::WriteTime(void)
{
    
	CTime time = CTime::GetCurrentTime();
	CString strDate;
	strDate.Format("%c%c%c%c%c%c%s %d%s%d%s%d%s%d%s%d%s%d%s %s%c%c%c%c",0x0d,0x0a,0x0d,0x0a,
		          0x0d,0x0a,"----------------",
		          time.GetYear(),"年",time.GetMonth(),"月",time.GetDay(),"日 星期"
				  +ConverNum(time.GetDayOfWeek()),time.GetHour(),"点",time.GetMinute(),
				  "分",time.GetSecond(),"秒","----------------",0x0d,0x0a,0x0d,0x0a);

    return strDate;
}

CString CMyDlg::ConverNum(int nNum)
{
	switch(nNum)
	{
	case 1: return "天 ";
	case 2: return "一 ";
	case 3: return "二 ";
	case 4: return "三 ";
	case 5: return "四 ";
	case 6: return "五 ";
	case 7: return "六 ";
	}
	return "";
}

void CMyDlg::OnButtonSendClean() 
{
     UpdateData(1);
	 m_edit_Cstr_indata = "";
	 UpdateData(0);
}

void CMyDlg::OnCheckUseAnswer() 
{
     m_check_use_answer = !m_check_use_answer;
	 CMyDlg::OnChangeEditWhenRec();
	 CMyDlg::OnChangeEditThenSend();
}

void CMyDlg::OnCheckRecconver() //16#answer;
{
     m_check_rec_conver = !m_check_rec_conver;
	 CMyDlg::OnChangeEditWhenRec();
	 CMyDlg::OnChangeEditThenSend();
}

void CMyDlg::OnChangeEditWhenRec() 
{
	 UpdateData(1);
	 int nError=0,nLen,i;
	 CString strInData = m_edit_Cstr_whenrec;
	 nLen = strInData.GetLength();
	 if(m_check_rec_conver)//pack 16# data
	 {
		 nError = PackMutualData(1,strInData);
	 }
	 else //pack char
	 {
		 WhenRecData.SetSize(nLen);
 		 for(i=0;i<nLen;i++) WhenRecData[i] = (BYTE)strInData[i];
	 }
	 if(nError!=0)MessageBox("     您输入的数据有误!\n数据范围为(0—FF),数字间以空格分隔","检测--条件判断数据域",MB_OK);
	 m_nWhenRecError = nError;
	 UpdateData(0);
  
}

void CMyDlg::OnChangeEditThenSend() 
{
     UpdateData(1);
     int nError=0,nLen,i;
	 CString strInData = m_edit_Cstr_thensend;
	 nLen = strInData.GetLength();
	 if(m_check_rec_conver)
	 {
		 nError = PackMutualData(2,strInData);
	 }
	 else
	 {
		 ThenSendData.SetSize(nLen);
		 for(i=0;i<nLen;i++) ThenSendData[i] = (BYTE)strInData[i];
	 }
	 if(nError!=0)MessageBox("     您输入的数据有误!\n数据范围为(0—FF),数字间以空格分隔","检测--条件发送数据域",MB_OK);	
	 m_nThenSendError = nError;
	 UpdateData(0);
}

int CMyDlg::PackMutualData(int nSelect,CString strInData)
{
	 CByteArray CheckHexData;
	 int i,nLen,k=0;
	 nLen = strInData.GetLength();
	 //if(nLen == 0) return = 3;
	 CheckHexData.SetSize(1000);
	 char hdata,ldata;
	 for(i=0;i<nLen;i+=2)
	 {
		 if(strInData[i] != ' ')
		 {
			 if((hdata = ToHexChar(strInData[i])) != -1)
			 {
				 if((i+1) < nLen)
				 {
					 if((ldata = ToHexChar(strInData[i+1])) != -1)
					 {
						 if((i+2) < nLen)
					 	{
						 	if(strInData[i+2] != ' ' )
							{
								//m_edit_Cctrl_indata.SetSel(i,i+3);
								return 2; //the data is beyond of rang
							}
						 	else CheckHexData[k++] = (hdata*16 + ldata);
						 }
					 	else CheckHexData[k++] = (hdata*16 + ldata);
				 	}
				 	else if(strInData[i+1] == ' ')CheckHexData[k++] = hdata;
			     	else 
					{
                        //m_edit_Cctrl_indata.SetSel(i,i+2);
						return 1;
					}
			 	}
				 else CheckHexData[k++] = hdata;
		 	}
		 	else 
			{
				//m_edit_Cctrl_indata.SetSel(i,i+3);
				return 1;//Can not conver to hex char 
			}
	 	}
		else i-=1;
	 }	 
	 CheckHexData.SetSize(k);	 
	 if(nSelect == 1)
	 {
		 WhenRecData.SetSize(1000);
		 for(i=0;i<k;i++) CMyDlg::WhenRecData[i] = CheckHexData[i];
		 WhenRecData.SetSize(k);
	 }
	 else
	 {	
		 ThenSendData.SetSize(1000);
		 for(i=0;i<k;i++) CMyDlg::ThenSendData[i] = CheckHexData[i];
		 ThenSendData.SetSize(k);
	 }
	 return 0;
}





void CMyDlg::OnKillfocusEditSendCircle() 
{
	 if(m_check_auto_send)
	 {
		 CMyDlg::SetTimer(1,m_lSendTime,NULL);
	 }
}

void CMyDlg::OnCheckLocalDis() 
{
     m_check_local_dis = !m_check_local_dis;	 
}







void CMyDlg::OnButtonThensendclean() 
{
     m_edit_Cstr_whenrec = "";
	 m_edit_Cstr_thensend = "";
     WhenRecData.RemoveAll();
	 ThenSendData.RemoveAll();
	 UpdateData(0);
}

⌨️ 快捷键说明

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