// Mscomm事件
void CcomDlg::OnCommMscomm()
{
// TODO: 在此处添加消息处理程序代码
static unsigned int cnt = 0;
VARIANT variant_inp;
OleSafeArray safearray_inp;
long len,k;
unsigned int data[1024]={0};
byte rxdata[1024];
CString strtemp;
if(m_mscomm.get_CommEvent()==2)
{//MessageBox(_T("接收缓冲区内有字符"),_T("接收提示"));
cnt++;
variant_inp = m_mscomm.get_Input(); // 读取串口缓冲区消息
safearray_inp = variant_inp;// VARIANT型变量转换为ColeSafeArray型变量
len = safearray_inp.GetOneDimSize(); // 得到有效数据长度
for(k=0;k<len;k++)
{ safearray_inp.GetElement(&k,rxdata+k); //转换为BYTE型数组
}
for(k=0;k<len;k++)
{ strtemp.Format(_T("%c"),*(rxdata+k)); // 将字符送入临时变量strtemp存放
m_EditRec += strtemp; // 组拼字符串
}
}
UpdateData(FALSE); // 更新编辑框内容:由字符变量内容更新至编辑框
}我上述的代码只能做到接收每个字符,但同一发过来的字符串中还有Tab制表符、\r\n字符。
关键在于strtemp.Format(_T("%c"),*(rxdata+k)); 只转换字符。
现在我的问题是如何将发过来的字符串的中的Tab制表符、\r\n字符一起在接收到的编辑框中显示呢?
比如我的TAB是用于字符串之间隔开的,而\r\n是换行的。这样在编辑框看起十分有格式的。
请问上述的代码该如何修改?
谢谢!
for(k=0;k<len;k++)
{
strtemp.Format(_T("%c"),*(rxdata+k));
m_EditRec += strtemp;
}
*/
m_EditRec += (LPCSTR)rxdata;
多次读取时则为
015.3 015.3 1.00 0.066 233.1
015.3 015.3 1.00 0.066 233.1
015.3 015.3 1.00 0.066 233.1
015.3 015.3 1.00 0.066 233.1
这样的效果,每次三十个字节。
但信然无效。
请各手多给办法,我在线等多试试。
或者将rxdata输出到文件,查看是否有\r\n数据.如果你的数据是纯ASCII码,不如串口用comInputModeText,然后接收代码改为
CComVariant varText;
varText.Attach(m_mscomm.get_Input());
varText.ChangeType(VT_BYREF|VT_I1);
strTemp=varText.pcVal;
m_EditRec += strtemp;