📄 scommdlg.cpp
字号:
AfxMessageBox(strStatus);
//状态栏(自己做的一个静态文本)
m_ctrlPortStatus.SetWindowText(strStatus);
}
}
//选择串口号 组合框
void CSCOMMDlg::OnSelendokComboComselect()
{
// TODO: Add your control notification handler code here
//m_bOpenPort = FALSE;
//CString strStatus;
//m_hComm 串口是否已经打开, NULL关闭, 其他打开
if (m_Port.m_hComm != NULL) //此串口号是原来的, 如果原来的串口是打开的, 在更换串口前, 将原来的串口关闭
{
m_Port.ClosePort();
}
//m_Com 为 与控件"串口号" 相关联的控件变量
m_nCom = m_Com.GetCurSel()+1;
/*strStatus.Empty();
strStatus.Format("COM%d", m_Com.GetCurSel());
AfxMessageBox(strStatus);*/
SetPortParameter();
}
//选择波特率 组合框
void CSCOMMDlg::OnSelendokComboSpeed()
{
// TODO: Add your control notification handler code here
CString temp;
int nIndex = m_Speed.GetCurSel();
int result;
switch (nIndex)
{ //300;600;1200;2400;4800;9600;19200;38400;56000;57600;115200;
case 0:
result = 300;
break;
case 1:
result = 600;
break;
case 2:
result = 1200;
break;
case 3:
result = 2400;
break;
case 4:
result = 4800;
break;
case 5:
result = 9600;
break;
case 6:
result = 19200;
break;
case 7:
result = 38400;
break;
case 8:
result = 56000;
break;
case 9:
result = 57600;
break;
case 10:
result = 115200;
break;
default:
break;
}
m_nBaud = result;
SetPortParameter();
/*CString strStatus;
BOOL ret;
ret = m_Port.InitPort(this, m_nCom, m_nBaud, m_cParity, m_nDatabits, m_nStopbits, m_dwCommEvents, 512);
if (ret)
{
if(m_bOpenPort == FALSE)
{
m_Port.StartMonitoring();
m_ctrlIconOpenoff.SetIcon(m_hIconRed);
strStatus.Empty();
//strStatus.Format("STATUS:COM%d OPENED,%d,%c,%d,%d",m_nCom, m_nBaud,m_cParity,m_nDatabits,m_nStopbits);
strStatus.Format("当前状态: COM%d已打开,%dbps,%c,%d,%d", m_nCom, m_nBaud, m_cParity, m_nDatabits, m_nStopbits);
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
//m_Port.StopMonitoring();
m_Port.ClosePort();
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);
strStatus.Empty();
strStatus.Format("当前状态: COM%d已关闭", m_nCom);
m_ctrlPortStatus.SetWindowText(strStatus);
}
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
strStatus.Empty();
strStatus.Format("当前状态: COM%d %dbps波特率设置失败", m_nCom, m_nBaud);
m_ctrlPortStatus.SetWindowText(strStatus);
}*/
}
//选择校验位 组合框
void CSCOMMDlg::OnSelendokComboParity()
{
// TODO: Add your control notification handler code here
char temp;
int nIndex=m_Parity.GetCurSel();
switch (nIndex)
{
case 0:
temp='N';
break;
case 1:
temp=0X4F;//'O';
break;
case 2:
temp='E';
break;
default: //Mark Space 暂时不支持
#ifdef Debug8
CString str;
str.Empty();
str.Format("m_cParity=%c", m_cParity);
MessageBox(str, "信息提示", MB_OK);
#endif
if (m_cParity == 'N')
{
nIndex = 0;
}
else if (m_cParity == 'O')
{
nIndex = 1;
}
else
{
nIndex = 2;
}
m_Parity.SetCurSel(nIndex);
MessageBox("暂时不支持", "信息提示", MB_OK);
return;
break;
}
m_cParity = temp;
SetPortParameter();
/*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);
strStatus.Empty();
strStatus.Format("当前状态: COM%d已打开,%dbps,%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);
strStatus.Empty();
strStatus.Format("当前状态: COM%d已打开,%dbps,%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 nIndex=m_DataBits.GetCurSel();
int result;
switch (nIndex)
{
case 0:
result = 8;
break;
case 1:
result = 7;
break;
case 2:
result = 6;
break;
}
m_nDatabits = result;
SetPortParameter();
/*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);
strStatus.Empty();
strStatus.Format("当前状态: COM%d已打开,%dbps,%c,%d,%d", m_nCom, m_nBaud, m_cParity, m_nDatabits, m_nStopbits);
}
else
{
//m_Port.StopMonitoring();
m_Port.ClosePort();
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);
strStatus.Empty();
strStatus.Format("当前状态: COM%d已关闭", m_nCom);
}
m_ctrlPortStatus.SetWindowText(strStatus);
}
else
{
AfxMessageBox("没有成功,请重试");
m_ctrlIconOpenoff.SetIcon(m_hIconOff);
}*/
}
//选择停止位 组合框
void CSCOMMDlg::OnSelendokComboStopbits()
{
// TODO: Add your control notification handler code here
int nIndex = m_StopBits.GetCurSel();
int result;
switch (nIndex)
{
case 0:
result = 1;
break;
case 1:
result = 2;
break;
}
m_nStopbits = result;
SetPortParameter();
/*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);
strStatus.Empty();
strStatus.Format("当前状态: COM%d已打开,%dbps,%c,%d,%d", m_nCom, m_nBaud, m_cParity, m_nDatabits, m_nStopbits);
}
else
{
//m_Port.StopMonitoring();
m_Port.ClosePort();
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);
strStatus.Empty();
strStatus.Format("当前状态: COM%d已关闭", m_nCom);
}
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();
int nCount;
for (nCount=0; nCount<nLength; nCount++)
{
//if (m_strCurPath.GetAt( nCount ) == '\\')
if ((m_strCurPath[nCount] == '\\') && (m_strCurPath[nCount-1] != ':'))
{
CreateDirectory(m_strCurPath.Left(nCount+1), NULL); //创建目录
//break;
}
}
//没有发现'\\', 直接创建目录
if (nCount == nLength)
{
CreateDirectory(m_strCurPath, NULL);
}
//设置当前目录
LPCTSTR lpszPath = m_strCurPath;// "c:\\comdata";
SetCurrentDirectory(lpszPath);
CFile m_rFile;
//文件名为Rec**.txt,以下代码自动检测文件名是否存在,若存在,则后面序号自动递增
//如Rec00.txt Rec01.txt,程序自动为正要保存的文件命名为Rec02.txt.
CString str;
CFileStatus Status;
BOOL bret;
int nIndex=0;
while (1)
{
str.Empty();
str.Format("Rec%02d.txt", nIndex);
/*ret = access((LPCTSTR)str, 0); //buf文件名, 0检查文件是否存在
if (ret == -1) //access()函数返回值: 0-允许访问,-1 禁止访问
{
break;
}*/
bret = CFile::GetStatus(str, Status);
MessageBox(str, "信息提示", MB_OK);
if (bret == FALSE)
{
CString str1;
str1.Empty();
str1 = str+"磁盘上文件不存在,需要建立文件";
MessageBox(str1, "信息提示", MB_OK);
break;
}
nIndex ++;
}
//创建新文件
bret = m_rFile.Open((LPCTSTR)str, CFile::modeCreate|CFile::modeWrite);
if (bret == 0)
{
AfxMessageBox( "创建记录文件失败!");
return;
}
bret = CFile::GetStatus(str, Status);
//MessageBox(str, "信息提示", MB_OK);
if (bret == FALSE)
{
MessageBox("failed", "信息提示", MB_OK);
return;
}
/*ret = access((LPCTSTR)str, 0);
if (ret == -1)
{
AfxMessageBox("failed");
return;
}*/
CTime t = CTime::GetCurrentTime();
//CString strtime=t.Format("%Y年%m月%d日%H时%M分%S秒\r\n");
CString strtime = t.Format("%Z:%Y年%m月%d日%H时%M分%S秒 星期%w\n");
//MessageBox(strtime, "信息提示", MB_OK);
m_rFile.Write((LPCTSTR)strtime, strtime.GetLength());
m_rFile.Write((LPCTSTR)m_ReceiveData, m_ReceiveData.GetLength());
m_rFile.Flush();
m_rFile.Close();
m_strBak = m_strCurPath; //备份当前工作路径
strtime.Empty();
strtime = "OK,";
for(int i=0; i<5; i++)
{
strtime += str[i];
}
strtime += ".txt saved";
m_ctrlSavePath.SetWindowText(strtime);
//m_ctrlSaveData.EnableWindow(FALSE);
CButton *pButton = (CButton *)GetDlgItem(IDC_BUTTON_SAVEDATA);
pButton->EnableWindow(FALSE);
SetTimer(2, 500, 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
//选择文件夹对话框
CString StrFolder;
BROWSEINFO bi;
memset(&bi, 0, sizeof(bi));
bi.hwndOwner = this->m_hWnd;
//bi.ulFlags = BIF_EDITBOX ;
bi.ulFlags = BIF_RETURNONLYFSDIRS|BIF_STATUSTEXT|BIF_USENEWUI;
bi.lpszTitle = "请选择要保存接收数据的文件夹";
//bi.pidlRoot = NULL;
//bi.pszDisplayName = displayname;
bi.lpfn = NULL;
LPITEMIDLIST pidlBrowse = SHBrowseForFolder(&bi);
if (pidlBrowse == NULL)
{
return;
}
SHGetPathFromIDList(pidlBrowse, StrFolder.GetBuffer(MAX_PATH));
StrFolder.ReleaseBuffer();
//CString str=path; //得到路径
//if (str.IsEmpty())
if (StrFolder.IsEmpty()) //查看StrFolder 是否为空, 非零为空, 0不为空
{
return; //如果没有选择,就返回
}
m_strCurPath = StrFolder; //接收路径编辑框对应变量
UpdateData(FALSE);
}
void CSCOMMDlg::OnButtonCountreset()
{
// TODO: Add your control notification handler code here
rxdatacount=0;
CString strTemp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -