基于VC6.0 MFC的简单串口通信软件编程
(一)基于对话框编程基本步骤:
1.新建基于对话框的工程;
2.拖曳所需的基本控件,构成界面;
3.使用类向导(CLASS WIZARD)创建与基本控件对应的成员变量、成员函数,确定与函数相应的消息或事件——即触礁发该函数执行的条件(如单击等)。
(二)使用mscomm控件:
1.基本设置:
m_com.SetCommPort(1); //选择COM1
m_com.SetInBufferSize(1024); //设置输入缓冲区的大小,Bytes
m_com.SetOutBufferSize(256); //设置输出缓冲区的大小,Bytes
if(!m_com.GetPortOpen()) //打开串口
m_com.SetPortOpen(TRUE);
m_com.SetInputMode(1); //设置输入方式为二进制方式
m_com.SetSettings("4800,s,8,1");
m_com.SetRThreshold(1); //为1表示有一个字符引发一个事件
m_com.SetInputLen(0);
2.似乎每次设置m_com.SetSettings("4800,s,8,1"),必须先关再开串口才有效。设置的校验位似乎只对发送数据有效,对接收数据无效。
3.虽然m_com.SetRThreshold(1)设置接收到一个字符就引发一个事件(触发执行函数),但执行函数读取到的数据可能不止1Byte,如另一串口连续发送多个字节,当串接收到第一个字节后就触发函数,但在函数去输入缓冲区读取数据时可以读到8Byte。
(三)MFC的一些基本使用:
1.Unsigned char 与char不同,在执行加减时,char型当作带符号数(可能为负)。
2.当控件对应的变量是控件类时,可能通过该类的成员函数来获取数据或执行操作:如m_com是mscomm控件的变量,可以执行m_com.SetPortOpen(FALSE)来关闭串口。
3.组合框对应的成员变量(int):当鼠标点取第N行数据时,用UpdateData(TRUE)更新此变量值后,变量=N-1。
UpdateData(true);//用于将屏幕上控件中的数据交换到变量中。要接受用户的输入就true
UpdateData(false);//用于将数据在屏幕中对应控件中显示出来。要输出结果给用户就flase
使用UpdateData()函数时,当前界面上所有绑定了的变量(即通过MFC ClassWizard给控件添加了对应的变量)都会被UpdateData(TRUE)更新成对应控件中的内容;同样所有绑定了变量的控件中的内容也会UpdateData(FALSE)更新成对应变量中的内容。数据量不多的话,最好用SetDlgItemText()和GetDlgItemText().GetWindowText()是获取控件当前内容(Caption或者the text within the control —for the control,具体可以查看MSDN)值,是对单个控件而言; 而UpdateData()是作用于整个CWnd的DDX数据交换机制之中的,是控件和数据的双向通道。
4.
GetDlgItem(IDC_CLOSE)->EnableWindow(FALSE);//禁用某控件(变灰)
GetDlgItem(IDC_OPEN)->EnableWindow(TRUE);//启用某控件
GetDlgItem(IDC_COMRXD)->SetWindowText(0);//清空编缉控件的内容
GetDlgItem(IDC_COMTXD)->SetWindowText(m_strT);//设置编缉控件的内容为
//m_strT(CSring类)
m_filename.GetWindowText(strName);//获取编缉控件的内容,strName为CSring类
strName += ".txt";//CSring类的加操作
nLength=m_nEdit.GetWindowTextLength();//获取编缉控件的字节数
m_nEdit.GetWindowText(strData);
file.Open(strName,CFile::modeCreate | CFile::modeWrite);//保存数据成文件。
file.Write(strData,nLength);
file.Close();
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/matwat/archive/2009/04/03/4032649.aspx