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

📄 scommdlg.cpp

📁 CSerialPort类做的串口通信编程
💻 CPP
📖 第 1 页 / 共 4 页
字号:

		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 + -