📄 common_serialdlg.cpp
字号:
void CComMon_SERIALDlg::OnSelchangeSelStopbit1()
{
BeginWaitCursor();
ResumeSerial(0);
Sleep(200);
ConfigChange(0);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnEditchangeCom2()
{
BeginWaitCursor();
CString sCom = m_sSelCom2;
UpdateData();
if(m_sSelCom1 == m_sSelCom2)
{
m_sSelCom2 = sCom;
UpdateData(FALSE);
MessageBox("正在使用该串口", "错误", MB_OK | MB_ICONSTOP);
return;
}
for(int n = 0; n < m_cSelCom2.GetCount(); n ++)
{
CString s;
m_cSelCom2.GetLBText(n, s);
if(s == sCom)
{
((CSerialPort*)m_aPorts[n])->StopMonitoring();
break;
}
}
int i = m_cSelCom2.GetCurSel();
ResumeSerial(i);
Sleep(200);
ConfigChange(i);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnEditchangeBaud2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnEditchangeDatabit2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnEditchangeCheckbit2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnEditchangeStopbit2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnSelchangeSelBaud2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnSelchangeSelCheckbit2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnSelchangeSelCom2()
{
BeginWaitCursor();
CString sCom = m_sSelCom2;
UpdateData();
if(m_sSelCom1 == m_sSelCom2)
{
m_sSelCom2 = sCom;
UpdateData(FALSE);
MessageBox("正在使用该串口", "错误", MB_OK | MB_ICONSTOP);
return;
}
for(int n = 0; n < m_cSelCom2.GetCount(); n ++)
{
CString s;
m_cSelCom2.GetLBText(n, s);
if(s == sCom)
{
((CSerialPort*)m_aPorts[n])->StopMonitoring();
break;
}
}
int i = m_cSelCom2.GetCurSel();
ResumeSerial(i);
Sleep(200);
ConfigChange(i);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnSelchangeSelDatabit2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnSelchangeSelStopbit2()
{
BeginWaitCursor();
ResumeSerial(1);
Sleep(200);
ConfigChange(1);
EndWaitCursor();
}
void CComMon_SERIALDlg::OnClearRcv1()
{
UpdateData();
m_sRERcv1 = "";
UpdateData(FALSE);
}
void CComMon_SERIALDlg::OnClearSnd1()
{
UpdateData();
m_sRESnd1 = "";
UpdateData(FALSE);
}
void CComMon_SERIALDlg::OnClearRcv2()
{
UpdateData();
m_sRERcv2 = "";
UpdateData(FALSE);
}
void CComMon_SERIALDlg::OnClearSnd2()
{
UpdateData();
m_sRESnd2 = "";
UpdateData(FALSE);
}
void CComMon_SERIALDlg::OnClearCount1()
{
UpdateData();
m_nRecvBytes1 = 0;
m_nSendBytes1 = 0;
UpdateData(FALSE);
}
void CComMon_SERIALDlg::OnClearCount2()
{
UpdateData();
m_nRecvBytes1 = 0;
m_nSendBytes1 = 0;
UpdateData(FALSE);
}
LRESULT CComMon_SERIALDlg::OnInitInterface(WPARAM wParam, LPARAM lParam)
{
if(m_cSelCom1.GetCount())
SetDlgItemText(IDC_ECOMSTATE1, "关 闭");
else
SetDlgItemText(IDC_ECOMSTATE1, "找不到串口");
if(m_cSelCom2.GetCount())
SetDlgItemText(IDC_ECOMSTATE2, "关 闭");
else
SetDlgItemText(IDC_ECOMSTATE2, "找不到串口");
// m_sRERcv1.Empty();
// m_sRESnd1.Empty();
// m_sRERcv2.Empty();
// m_sRESnd2.Empty();
return 0L;
}
LRESULT CComMon_SERIALDlg::OnCommEvent(WPARAM wParam, LPARAM lParam)
{
TRACE("OnCommEvent\n");
return 0L;
}
LRESULT CComMon_SERIALDlg::OnCommError(WPARAM wParam, LPARAM lParam)
{
TRACE("OnCommError\n");
return 0L;
}
LRESULT CComMon_SERIALDlg::OnComRXChars(WPARAM wParam, LPARAM lParam)
{
if(m_chNotRecv.GetCheck())
return 0L;
unsigned char cRcv = (unsigned char)wParam;
CString sCom;
sCom.Format("COM%d", (int)lParam);
UpdateData();
if(m_sSelCom1 == sCom)
{
if(m_nBufSize < m_nRecvBytes1)
{
m_aByteRcv1.RemoveAll();
m_nRecvBytes1 = 0;
}
m_aByteRcv1.Add(cRcv);
m_nRecvBytes1 ++;
int nLine = m_reRecv1.GetLineCount();
switch(m_chRcvHex1.GetCheck())
{
case 0: // CHARS
{
m_sRERcv1 += cRcv;
if(cRcv == 0x0D)
m_sRERcv1 += cRcv;
break;
}
case 1: // HEX
{
CString sHex;
sHex.Format("%02X ", cRcv);
m_sRERcv1 += sHex;
break;
}
default:
ASSERT(FALSE);
}
UpdateData(FALSE);
m_reRecv1.LineScroll(m_reRecv1.GetLineCount() - nLine + 1);
}
else
{
if(m_nBufSize < m_nRecvBytes2)
{
m_aByteRcv2.RemoveAll();
m_nRecvBytes2 = 0;
}
m_nRecvBytes2 ++;
m_aByteRcv2.Add(cRcv);
int nLine = m_reRecv2.GetLineCount();
switch(m_chRcvHex2.GetCheck())
{
case 0: // CHARS
{
m_sRERcv2 += cRcv;
if(cRcv == 0x0D)
m_sRERcv2 += cRcv;
break;
}
case 1: // HEX
{
CString sHex;
sHex.Format("%02X ", cRcv);
m_sRERcv2 += sHex;
break;
}
default:
ASSERT(FALSE);
}
UpdateData(FALSE);
m_reRecv2.LineScroll(m_reRecv2.GetLineCount() - nLine + 1);
}
return 0L;
}
void CComMon_SERIALDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent)
{
case CLOCK1:
ASSERT(m_bClock1_Open);
if(((CButton*)GetDlgItem(IDC_CTRANSMIT_1AND2))->GetCheck())
{
if(((CButton*)GetDlgItem(IDC_CAUTOSND1))->GetCheck())
{
UpdateData();
if(m_sRERcv2.IsEmpty())
break;
SetDlgItemText(IDC_RESEND1, m_sRERcv2);
OnSend1();
break;
}
}
else
OnSend1();
break;
case CLOCK2:
ASSERT(m_bClock2_Open);
if(((CButton*)GetDlgItem(IDC_CTRANSMIT_1AND2))->GetCheck())
{
if(((CButton*)GetDlgItem(IDC_CAUTOSND2))->GetCheck())
{
UpdateData();
if(m_sRERcv1.IsEmpty())
break;
SetDlgItemText(IDC_RESEND2, m_sRERcv1);
OnSend2();
break;
}
}
else
OnSend2();
default:
ASSERT(FALSE);
}
CDialog::OnTimer(nIDEvent);
}
void CComMon_SERIALDlg::OnChangeESendCycle1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
ASSERT((!m_bClock1_Open && !m_chAutoSnd1.GetCheck()) ||
(m_bClock1_Open && m_chAutoSnd1.GetCheck()));
UpdateData();
KillTimer(CLOCK1);
SetTimer(CLOCK1, m_nSendCycle1, NULL);
}
void CComMon_SERIALDlg::OnChangeESendCycle2()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
ASSERT((!m_bClock2_Open && !m_chAutoSnd2.GetCheck()) ||
(m_bClock2_Open && m_chAutoSnd2.GetCheck()));
UpdateData();
KillTimer(CLOCK2);
SetTimer(CLOCK2, m_nSendCycle1, NULL);
}
void CComMon_SERIALDlg::OnChangeRESend1()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
}
void CComMon_SERIALDlg::OnChangeRESend2()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
CString strNow;
GetDlgItemText(IDC_RESEND1, strNow);
for(int i = 0; i < strNow.GetLength(); i ++)
{
if(!isdigit(strNow[i]) && !isalpha(strNow[i]))
{
UpdateData(FALSE);
if(abs(m_nSelE - m_nSelS) != 0)
{
m_reSend1.SetSel(m_nSelE, m_nSelE);
}
else
{
m_reSend1.SetSel(m_nSelS, m_nSelE);
}
return;
}
}
strNow.MakeUpper();
m_sRESnd1 = strNow;
UpdateData(FALSE);
m_reSend1.SetSel(m_nSelS, m_nSelE);
}
void CComMon_SERIALDlg::OnSelChangeRESend1(NMHDR* pNMHDR, LRESULT* pResult)
{
SELCHANGE *pSelChange = reinterpret_cast<SELCHANGE *>(pNMHDR);
// TODO: The control will not send this notification unless you override the
// CDialog::OnInitDialog() function to send the EM_SETEVENTMASK message
// to the control with the ENM_SELCHANGE flag ORed into the lParam mask.
#if 0
// TODO: Add your control notification handler code here
if(!m_chSendHex1.GetCheck())
{
UpdateData();
m_sRESnd1.MakeUpper();
UpdateData(FALSE);
m_reSend1.SetSel(m_sRESnd1.GetLength(), m_sRESnd1.GetLength());
return;
}
CString strNow;
GetDlgItemText(IDC_RESEND1, strNow);
long nSelSB = pSelChange->chrg.cpMin, nSelEB = pSelChange->chrg.cpMax;
if(strNow.IsEmpty())
{
m_nSelS = nSelSB;
m_nSelE = nSelEB;
*pResult = 0;
return;
}
for(int i = 0; i < strNow.GetLength(); i ++)
{
if(!isdigit(strNow[i]) && (strNow[i] < 'A' || (strNow[i] > 'F'
&& (strNow[i] < 'a' || strNow[i] > 'f'))))
{
UpdateData(FALSE);
if(abs(m_nSelE - m_nSelS) != 0)
{
m_reSend1.SetSel(m_nSelE, m_nSelE);
}
else
{
m_reSend1.SetSel(m_nSelS, m_nSelE);
}
m_nSelS = nSelSB;
m_nSelE = nSelEB;
*pResult = 0;
return;
}
}
strNow.MakeUpper();
m_sRESnd1 = strNow;
UpdateData(FALSE);
m_nSelS = nSelSB;
m_nSelE = nSelEB;
m_reSend1.SetSel(m_nSelS, m_nSelE);
#endif
*pResult = 0;
}
void CComMon_SERIALDlg::OnSaveData1()
{
UpdateData();
if(m_sRERcv1.IsEmpty())
{
MessageBox("没有可保存的数据", "提示", MB_OK);
return;
}
CCustomFileDlg fdlg(FALSE, NULL, "*.txt", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*||");
fdlg.m_ofn.lpstrTitle = _T("保存文件");
if(fdlg.DoModal() == IDOK)
{
CString strFilePath = fdlg.GetPathName();
FILE* pStream = fopen(strFilePath, "w");
if(!pStream)
{
CString strErr;
strErr.Format("不能打开文件%s", fdlg.GetFileName());
MessageBox(strErr, "错误", MB_OK | MB_ICONSTOP);
return;
}
if((size_t)m_sRERcv1.GetLength() !=
fwrite((LPCTSTR)m_sRERcv1, sizeof(char), m_sRERcv1.GetLength(), pStream))
{
CString strWErr;
strWErr.Format("写文件%s时发生错误", fdlg.GetFileName());
MessageBox(strWErr, "错误", MB_OK | MB_ICONSTOP);
}
TRY
{
fclose(pStream);
}
CATCH_ALL(e)
{
}
END_CATCH_ALL
}
}
void CComMon_SERIALDlg::OnSaveData2()
{
UpdateData();
if(m_sRERcv2.IsEmpty())
{
MessageBox("没有可保存的数据", "提示", MB_OK);
return;
}
CCustomFileDlg fdlg(FALSE, NULL, "*.txt", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*||");
fdlg.m_ofn.lpstrTitle = _T("保存文件");
if(fdlg.DoModal() == IDOK)
{
CString strFilePath = fdlg.GetPathName();
FILE* pStream = fopen(strFilePath, "w");
if(!pStream)
{
CString strErr;
strErr.Format("不能打开文件%s", fdlg.GetFileName());
MessageBox(strErr, "错误", MB_OK | MB_ICONSTOP);
return;
}
if((size_t)m_sRERcv1.GetLength() !=
fwrite((LPCTSTR)m_sRERcv1, sizeof(char), m_sRERcv1.GetLength(), pStream))
{
CString strWErr;
strWErr.Format("写文件%s时发生错误", fdlg.GetFileName());
MessageBox(strWErr, "错误", MB_OK | MB_ICONSTOP);
}
TRY
{
fclose(pStream);
}
CATCH_ALL(e)
{
}
END_CATCH_ALL
}
}
void CComMon_SERIALDlg::OnAutoNLine1()
{
// TODO: Add your control notification handler code here
}
void CComMon_SERIALDlg::OnAutoNLine2()
{
// TODO: Add your control notification handler code here
}
void CComMon_SERIALDlg::OnAutoSnd1()
{
// TODO: Add your control notification handler code here
m_eSendCycle1.EnableWindow(m_chAutoSnd1.GetCheck());
}
void CComMon_SERIALDlg::OnAutoSnd2()
{
// TODO: Add your control notification handler code here
m_eSendCycle2.EnableWindow(m_chAutoSnd2.GetCheck());
}
BOOL CComMon_SERIALDlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message == WM_DESTROY)
{
if(m_bClock1_Open)
KillTimer(CLOCK1);
if(m_bClock2_Open)
KillTimer(CLOCK2);
}
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN:
return TRUE;
case VK_ESCAPE:
return TRUE;
default:
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -