制。2编程实现在VC++6.0中,用APPWizard可以生成三种应用程序:单
文档(SDI)、多文档(MDI)和基于对话框的应用程序。为了说明
问题和省去不必要的细节,[2本文以基于对话框的应用程序为例。]2.1创建一个基于对话框的应用程序打开VC++6.0集成开发环境,选择菜单项File/New,在出现的对话框中选中Projects标签中的MFCAppWizard(exe),然后在ProjectName框中填入MyCOMM(可根据需要命名),之后点OK按钮,在接着出现的对话框中选中DialogBased项,然后点NEXT按钮。以下的各对话框都按照缺省设置,这样即可生成一个基于对话框的应用程序。在资源编程器中会出现其对话框模板。2.2插入MSCOMM控件选择菜单项Project/Addtoproject/ComponentsandControls…,在弹出的对话框中选择RegisteredActiveXControls文件夹下的MicrosoftCommunicationsControl,version6.0,然后按下Insert按钮,接着会弹出一个对话框,提示生成的类名及文件名,按OK按钮即可实现控件的插入。这时在对话框的控件工具栏上会多出一个电话机模样的控件图标,Workspace的Classview中也多了一个类CMSComm。此时即可将MSComm控件加入到对话框模板,加入方法与其他控件一样。然后还要在对话框类中相应加入一个成员变量,此处我们将其命名为m_comm。加入方法为:首先,在对话框模板中,用鼠标右键点击该控件,选择ClassWizard,在出现的对话框的MemberVariables标签的ControlIds项下,选中IDC_MSCOMM1。然后,按AddVariable…按钮,在出现的对话框的MemberVariableName项中输入m_comm。最后,按OK按钮即可。2.3设置属性可以在两个地方对控件的属性进行设置:(1)对话框资源编辑器中。在对话框模板上,用右键单击MSCOMM控件,然后选择Properties…菜单项,最后便可设置各项属性。此处只对以下几处进行改动,其他接受缺省设置:Rthershold:1,InputLen:1,(DTREnable:不选,InputMode:12Binary。2)对话框类的OnInitDialog()函数中。下面是以上设置的函数实现:BOOLCMyCOMMDlg::OnlnitDialog()
{CDialog::OnlnitDialog();m_comm.SetCommPort(1);//使用串口1m_comm.SetSettings("9600,N,8,1");//波特率为9600,无奇偶校验,8位数据位,1
位停止位m_comm.SetRThreshold(10);//每接收10个字符就触发1次接收事件m_comm.SetSThreshold(0);//不触发发送事件m_comm.SetInputLen(10);//每次读操作从缓冲区中取10个字符m_comm.SetInputMode(1);//二进制数据传输形式;m_comm.SetPortOpen(TRUE);//打开串口returnTRUE;}2.4发送二进制数据如果需要发送二进制数据,可将数据作如下处理。具体代码如下:
CByteArraybytOutArr;bytOutArr.Add(0x0);//给数组赋值bytOutArr.Add(0x1);bytOutArr.Add(0x2);bytOutArr.Add(0x3);bytOutArr.Add(0x4);COleVariantvarOut;varOut=COleVariant(bytOutArr);//将数
据转换为变体数据类型m_comm.SetOutput(varOut);//发送数据
2.5接收二进制数据(1)响应OnComm事件。在对话框资源编程器
中,双击对话框模板上的MSCOMM控件,在弹出的对话框中填入您所希望的事件响应函数名,此处将其命名为OnCommMSComm1()。(2)在事件响应函数中接收和处理数据。接收来的数据为变体数据,所以需要做一些处理,具体代码如下:voidCMyCOMMDlg::OnCommMSComm1()
{COleVariantvarRcv;CByteArraybyt;intI;longnum;switch(m_comm.GetCommEvent()){cass1://数据发送事件break;61
新乡师范高等专科学报第19卷
case2://数据接收事件varRcv=m_comm.GetInput();varRcv.ChangeTypeVT_UI1);BYTEHUGEP3pbstr;HRESULThr;num=0;if(FAILED(hr)){break;}break;default:break;}}(VT_ARRAY|
3VC++.N