MSComm控件的使用网上资料很多,在此不再累赘。MSComm控件接收的GPS数据很短,只有7或8个字节,故根据GPS语句的特点(每行GPS语句以\n\t结束),可以编程接收每句GPS语句,并进行处理,获取自己需要的信息。OnCommMscomm()处理代码如下:
void CXXXDlg::OnCommMscomm()
{
// TODO: 在此处添加消息处理程序代码
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
byte rxdata[1024];//设置BYTE数组
CString strtemp;
if (m_Comm.get_CommEvent()==2) //值为2表示接收缓冲区内有字符
{
variant_inp = m_Comm.get_Input();//读取缓冲区消息
safearray_inp = variant_inp;//变量转换
len = safearray_inp.GetOneDimSize();//取得有效地数据长度
for (k = 0;k < len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
for (k = 0;k < len;k++)
{
char bt=*(char*)(rxdata+k);
strGpsLine[nstr] = bt;
nstr++;
if (bt == 0x0a)
{
ProcessGPS(strGpsLine);//处理GPS语句
memset(strGpsLine,0x00,2048);
nstr=0;
}
}
}
}
ProcessGPS()函数用于处理GPS语句,从中获取GPS信息,对GPS语句的处理方法很多,由于GPS语句是用","分割的,故本人倾向于用AfxExtractSubString()来提取想要的信息。