MSComm编程的一个误解

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

以前曾看到一篇文章,说如果使用一般的视而不使用CFormView或者Dialog,就无法使用MSComm控件。但事实并不是这么回事。如同标准控件一样,对于ActiveX控件也可以使用Create函数,从而在运行时创建控件,并且实现所有功能。

下面介绍步骤:

1>使用resource symbols加入IDC_MSCOMM

2>在设置串口时加入CReate

void Init_Com()

{

m_Serial.Create("windowname",0,

CRect(0,0,0,0),this,IDC_MSCOMM);

// 指定串口号

m_Serial.SetCommPort(2);

// 关闭该串口

if(m_Serial.GetPortOpen())

m_Serial.SetPortOpen(FALSE);

// 通信参数设置

m_Serial.SetSettings("9600,N,8,1");

// 指定接收缓冲区大小

m_Serial.SetInBufferSize(1024);

// 清空接收缓冲区

m_Serial.SetInBufferCount(0);

// 设置数据获取方式

m_Serial.SetInputMode(1);

//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件

m_Serial.SetRThreshold(1);

//设置当前接收区数据长度为0

m_Serial.SetInputLen(0);

if( !m_Serial.GetPortOpen())

m_Serial.SetPortOpen(TRUE);//打开串口

else

AfxMessageBox("cannot open serial port");

m_Serial.GetInput();//先预读缓冲区以清除残留数据

}

3>发送函数

void Send_Data()

{

m_Serial.SetOutput(COleVariant("got"));

}

4>加入对数据接收和错误消息的映射。须手工进行:

在头文件中加入

afx_msg void OnComm();

在实现文件中加入

BEGIN_EVENTSINK_MAP(CxxxView, CView)

//{{AFX_EVENTSINK_MAP(CTestCommView)

ON_EVENT(CxxxView, IDC_MSCOMM, 1 /* OnComm */, OnComm, VTS_NONE)

//}}AFX_EVENTSINK_MAP

END_EVENTSINK_MAP()

void CxxxView::OnComm()

{

// TODO: Add your control notification handler code here

AfxMessageBox("got");

}

大功告成!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航