📄 scommdlg.cpp
字号:
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
void CSCOMMDlg::OnSelendokComboParity()
{
// TODO: Add your control notification handler code here
char temp;
int i=m_Parity.GetCurSel();
switch(i)
{
case 0:
temp='N';
break;
case 1:
temp='O';
break;
case 2:
temp='E';
break;
}
m_cParity=temp;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("STATUS:COM%d CLOSED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
void CSCOMMDlg::OnSelendokComboDatabits()
{
// TODO: Add your control notification handler code here
//char temp;
int i=m_DataBits.GetCurSel();
switch(i)
{
case 0:
i=8;
break;
case 1:
i=7;
break;
case 2:
i=6;
break;
}
m_nDatabits=i;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("STATUS:COM%d CLOSED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
void CSCOMMDlg::OnSelendokComboStopbits()
{
// TODO: Add your control notification handler code here
int i=m_StopBits.GetCurSel();
switch(i)
{
case 0:
i=1;
break;
case 1:
i=2;
break;
}
m_nStopbits=i;
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))
{
if(!m_bOpenPort)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
}
else
{
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Format("STATUS:COM%d CLOSED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
}
//保存显示数据
void CSCOMMDlg::OnButtonSavedata()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
int nLength;
nLength = m_strCurPath.GetLength();
for( int nCount = 0; nCount < nLength; nCount++ )
{
if( m_strCurPath.GetAt( nCount ) == '\\' )
CreateDirectory( m_strCurPath.Left( nCount + 1 ), NULL );
}
CreateDirectory( m_strCurPath, NULL );
CFile m_rFile;
LPCSTR lpszPath =m_strCurPath;// "c:\\comdata";
SetCurrentDirectory( lpszPath );
//文件名为Rec**.txt,以下代码自动检测文件名是否存在,若存在,则后面序号自动递增
//如Rec00.txt Rec01.txt,程序自动为正要保存的文件命名为Rec02.txt.
char buf[20];
for(int j=0;j<100;j++)
{
sprintf(buf,"Rec%02d.txt",j);
if( (access( buf, 0 )) == -1 )//检查文件是否存在 存在返回0 否则返回-1
break;
}
if(!m_rFile.Open(buf,CFile::modeCreate | CFile::modeWrite ))
{
AfxMessageBox( "创建记录文件失败!");
return;
}
if((access(buf,0))==-1)
{
AfxMessageBox("failed");
return;
}
CTime t = CTime::GetCurrentTime();
CString str=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
m_rFile.Write((LPCTSTR)str,str.GetLength());
m_rFile.Write((LPCTSTR)m_ReceiveData,m_ReceiveData.GetLength());
m_rFile.Flush();
m_rFile.Close();
str="OK,";
for(int i=0;i<5;i++)
str+=buf[i];
str+=".txt saved";
m_ctrlSavePath.SetWindowText(str);
SetTimer(2,5000,NULL); //在定时器中显示保存文件状态
}
//改变文件保存路径
void CSCOMMDlg::OnButtonDirbrowser()
{
// TODO: Add your control notification handler code here
static char displayname[MAX_PATH];
static char path[MAX_PATH];
LPITEMIDLIST pidlBrowse; // PIDL selected by user
BROWSEINFO bi;
bi.hwndOwner = this->m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = displayname;
bi.lpszTitle = "请选择要保存接收数据的文件夹";
bi.ulFlags = BIF_EDITBOX ;
bi.lpfn = NULL;
pidlBrowse=SHBrowseForFolder( &bi);
if(pidlBrowse!=NULL)
{
SHGetPathFromIDList(pidlBrowse,path);
}
CString str=path; //得到路径
if(str.IsEmpty()) return; //如果没有选择,就返回
m_strCurPath=str; //接收路径编辑框对应变量
UpdateData(FALSE);
}
void CSCOMMDlg::OnButtonCountreset()
{
// TODO: Add your control notification handler code here
rxdatacount=0;
CString strTemp;
strTemp.Format("%ld",rxdatacount);
strTemp="RX:"+strTemp;
m_ctrlRXCOUNT.SetWindowText(strTemp);
TX_count=0;
strTemp.Format("%ld",TX_count);
strTemp="TX:"+strTemp;
m_ctrlTXCount.SetWindowText(strTemp);
}
void CSCOMMDlg::OnButtonClose()
{
// TODO: Add your control notification handler code here
//CString str;
//str.Format("RoaringWindSoft You can use all the functions of the SComAssistant,But if you registered:\r\nNo popup Message and No marks of RoaringWindStudio\r\nFree Updates(Send to you Automaticly by Email)\r\n Thank You");
//AfxMessageBox(str);
CSCOMMDlg::OnOK();
}
//选择要发送的文件
void CSCOMMDlg::OnButtonFilebrowser()
{
// TODO: Add your control notification handler code here
LPCSTR lpszPath = "c:\\comdata";
SetCurrentDirectory( lpszPath );
static char BASED_CODE szFilter[] = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||";
CFileDialog FileDlg( TRUE, NULL, NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
szFilter );
FileDlg.m_ofn.lpstrInitialDir = lpszPath ;
if( FileDlg.DoModal() ==IDOK )
{
CString strFileName = FileDlg.GetFileName( );
CString strFileExt = FileDlg.GetFileExt( );
CString lpstrName = FileDlg.GetPathName( );
m_strSendFilePathName=lpstrName;
UpdateData(FALSE);
}
}
//发送文件
void CSCOMMDlg::OnButtonSendfile()
{
// TODO: Add your control notification handler code here
CFile fp;
if(!(fp.Open((LPCTSTR)m_strSendFilePathName,CFile::modeRead)))
{
AfxMessageBox("Open file failed!");
return;
}
fp.SeekToEnd();
unsigned long fplength=fp.GetLength();
m_nFileLength=fplength;
char* fpBuff;
fpBuff=new char[fplength];
fp.SeekToBegin();
if(fp.Read(fpBuff,fplength)<1)
{
fp.Close();
return;
}
fp.Close();
CString strStatus;
if (m_Port.InitPort(this, m_nCom, m_nBaud, m_cParity, m_nDatabits, m_nStopbits, m_dwCommEvents, fplength))
{
m_Port.StartMonitoring();
strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
m_bSendFile=TRUE;
m_strTempSendFilePathName=m_strSendFilePathName;
m_ctrlEditSendFile.SetWindowText("正在发送......");
//发送文件时,以下功能不能使用
m_ctrlManualSend.EnableWindow(FALSE);
m_ctrlAutoSend.EnableWindow(FALSE);
m_ctrlSendFile.EnableWindow(FALSE);
m_Port.WriteToPort((LPCTSTR)fpBuff,fplength);
}
else
{
AfxMessageBox("Failed to send file!");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}
delete fpBuff;
}
//检测文件是否发送完毕
LONG CSCOMMDlg::OnFileSendingEnded(WPARAM wParam,LPARAM port)
{
if(m_bSendFile)
{
m_ctrlEditSendFile.SetWindowText("发送完毕!");//m_strSendFilePathName
TX_count+=m_nFileLength;
SetTimer(3,3000,NULL);
CString strTemp;
strTemp.Format("TX:%d",TX_count);
m_ctrlTXCount.SetWindowText(strTemp);
m_bSendFile=FALSE;
}
return 0;
}
void CSCOMMDlg::OnButtonPushpin()
{
// TODO: Add your control notification handler code here
m_ctrlPushPin.ProcessClick();
m_bVisible=!m_bVisible;
if(m_bVisible)
{
SetWindowPos(&wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
}
else
{
SetWindowPos(&wndBottom, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW);
BringWindowToTop();
}
}
void CSCOMMDlg::OnDestroy()
{
CDialog::OnDestroy();
m_ctrlAutoSend.SetCheck(0); //强行关闭自动发送
KillTimer(1); //关闭定时器
KillTimer(4); //?????????????????????????????????????????????????????????????????????
m_Port.ClosePort(); //关闭串口
m_ReceiveData.Empty(); //清空接收数据字符串
}
void CSCOMMDlg::OnButtonHelp()
{
// TODO: Add your control notification handler code here
TCHAR exeFullPath[MAX_PATH];
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
CString strlpPath;
strlpPath.Format("%s",exeFullPath);
strlpPath.MakeUpper();
strlpPath.Replace("串口调试助手V2.2.EXE","");
ShellExecute(NULL,NULL,_T("help.htm"),NULL,strlpPath,SW_SHOW);
}
void CSCOMMDlg::OnEnChangeEditRecive()
{
// TODO: 如果该控件是 RICHEDIT 控件,则它将不会
// 发送该通知,除非重写 CDialog::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -