MSCOMM32中设置接收字节数触发事件使用m_mscommCtrl.put_RThreshold(1);表示串口接收到一个字节就触发接收事件,于是需要接收时循环接收数据知道没有数据。
代码如下:
BEGIN_EVENTSINK_MAP(CMSCommMFCDemoDlg, CDialogEx)
ON_EVENT(CMSCommMFCDemoDlg, IDC_MSCOMM1, 1, CMSCommMFCDemoDlg::OnCommMscomm1, VTS_NONE)
END_EVENTSINK_MAP()
void CMSCommMFCDemoDlg::OnCommMscomm1()
{
// TODO: 在此处添加消息处理程序代码
if (m_mscommCtrl.get_CommEvent() == 2)
{
//接收事件
CByteArray byArrRecv;
byArrRecv.RemoveAll();
//循环读取数据,直到读取完毕
while (m_mscommCtrl.get_InBufferCount() > 0)
{
CByteArray byArrRecvTemp;
byArrRecvTemp.RemoveAll();
COleSafeArray stSafeArr = (COleSafeArray)(m_mscommCtrl.get_Input()); //读取数据
stSafeArr.GetByteArray(byArrRecv);
byArrRecv.Append(byArrRecvTemp);
}
CString csRecv;
for (int i = 0; i < byArrRecv.GetSize(); ++i)
{
csRecv.AppendFormat(_T("%02x "), byArrRecv.GetAt(i)); //十六进制
//csRecv.AppendFormat(_T("%c"), byArrRecv.GetAt(i)); //十进制常规数据
}
m_csReceive.Append(csRecv); //更新编辑框
UpdateData(FALSE);
}
return;
}