VS2017-MFC基于CSerialPort类串口通信
仅供自己学习
因为不满我发的第一篇博客里的Mscomm控件导入的MFC串口通信只能在X86下运行,于是我又捯饬了一下,弄了一个新的通信方法
1.在VS2017环境下创建基于对话框的MFC应用程序
这是最终的MFC界面,编辑过程如下:
1. 1设置控件属性
最上面的ComboBox的ID设为IDC_COMBO_PORT_Nr
下面的ComboBox的ID设为IDC_COMBO_BAUDRATE
中间Button1的Caption为打开串口、ID为IDC_BUTTON_OPEN_CLOSE
下面Button2的Caption为发送、ID为IDC_BUTTON_SEND
接收区的编辑框的ID为IDC_ReceiveEdit
发送区的编辑框的ID为IDC_SendEdit
1.2为控件添加变量
- 给最上面ComboBox控件添加变量,右击添加变量,名称为m_PortNr
- 给下面ComboBox控件添加变量,右击添加变量,名称为m_BaudRate,图片类似同上
- 给“打开串口”这个控件添加变量,右击添加变量,名称为m_OpenCloseCtrl
- 给发送区的编辑框添加变量,右击添加变量,名称为m_Send
- 同理给接收区的编辑框添加变量,右击添加变量,名称为m_ReceiveCtrl
1.3为控件添加消息处理函数
- 给控件“打开串口”添加消息处理函数,右击添加函数:
点击编辑代码, 在CserialcommunicationDlg::OnBnClickedButtonOpenClose()中添加如下代码
void CserialcommunicationDlg::OnBnClickedButtonOpenClose()
{
// TODO: 在此添加控件通知处理程序代码
//GetDlgItem(IDC_SendEdit)->SetFocus();
CString temp;
m_OpenCloseCtrl.GetWindowText(temp);///获取按钮的文本
UpdateData(true);
if (temp == _T("关闭串口"))///表示点击后是"关闭串口",也就是已经关闭了串口
{
m_SerialPort.ClosePort();
m_OpenCloseCtrl.SetWindowText(_T("打开串口"));///设置按钮文字为"打开串口"
}
///打开串口操作
else if (m_PortNr.GetCount() > 0)///当前列表的内容个数
{
int SelPortNO, SelBaudRate;
UpdateData(true);
m_PortNr.GetWindowText(temp);///CString temp
temp.Delete(0, 3);
SelPortNO = _tstoi(temp);
m_BaudRate.GetWindowText(temp);
S