📄 调试dlg.cpp
字号:
{
//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 + -