注意:Mscomm控件在VC6.0里面生成的类和VS2010里面生成的类不一样。准确的说是封装的操作名字和使用方式有点不一样。
以对话框程序为例,下面试着在vs2010下使用该控件(控件在使用之前必须要注册)。
第一步:
创建对话框程序,画好编辑框等控件。
第二步:
插入MSCOMM控件,添加控件相关的类。并为控件添加好变量。
第三步:
添加消息处理函数,这里要注意的是MSCOMM控件的响应函数要右击控件选择添加事件处理函数,消息类型选择为OnComm类型。
下面是各个函数的实现:特别注意一下这段:
void CCommTeatDlg::OnCommMscomm1()
{
// TODO: 串口消息处理
//常数 值 描述
//comEvSend 1 发送事件。
//comEvReceive 2 接收事件。
//comEvCTS 3 clear-to-send 线变化。
//comEvDSR 4 data-set ready 线变化。
//comEvCD 5 carrier detect 线变化。
//comEvRing 6 振铃检测。
//comEvEOF 7 文件结束。
short curEvent =m_com.get_CommEvent();
switch(curEvent)
{
case CMscomm1::comEvReceive:
EvReceiveHandle(); //串口接收处理示例
break;
}
}
//接收到字符处理;
void CUSARTDlg::EvReceiveHandle(void)
{
// TODO: 在此处添加消息处理程序代码
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;//
variant_inp=m_com.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++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型
strtemp.Format(_T("%02x"),bt);//将字符送入临时变量strtemp存放
m_RxStr+=strtemp;
m_RxStr+=" ";
//m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
SetDlgItemText(IDC_Rx,m_RxStr);
}
[cpp] view plain cop