您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > MSComm控件在VS2010中应用
MSComm控件在VS2010中应用分为控件注册与新建基于对话框MFC项目1、MSComm控件注册:解压MSComm32.zip压缩包(附在插入对象里),把解压后文件复制C:\Windows\System32。运行命令下输入:Regsvr32C:\Windows\System32\MSCOMM32.OCX进行注册,注册成功后会显示一下提示。2、新建基于对话框MFC项目第一步:在工具箱的下图这个位置右键,选择chooseitem第二步:在弹出的组件栏里选择“COMComponents”下的Microsoftcommunicationcontrol6.0,然后工具箱里就会有一个电话图标了第三步:添加控件,也就是把电话图标拖到对话框里,并添加控件变量添加空间以后,在控件上面右键,然后选择“addvariable”,这个时候请特别注意,下图两个红框里面的文件会被自动添加到工程,并且文件名都带“1”.如果你的工程里没有自动添加,或者文件名后面不带“1”,那么出错的可能性就很大了。网上有种帖子说,用右键工程--添加MFC类--添加ActiveX的MFC类--添加mscomm类定义,这样添加出来的文件个人实验下来是不带“1”的。我也不知道为什么,这两种方法大概都可以,有空的话你可比较一下带“1”和不带“1”的两个cpp文件和h文件的区别。第四步:添加消息响应函数在控件上右键--添加事件handle--添加响应函数这样添加以后cpp文件里会自动多出来以下代码1.BEGIN_EVENTSINK_MAP(CMscommTest3Dlg,CDialogEx)2.ON_EVENT(CMscommTest3Dlg,IDC_MSCOMM1,1,CMscommTest3Dlg::OnCommMscomm1,VTS_NONE)3.END_EVENTSINK_MAP()4.5.6.voidCMscommTest3Dlg::OnCommMscomm1()7.{8.//TODO:Addyourmessagehandlercodehere9.}特别注意,不要在控件上面右键用类向导添加消息响应函数,这样添加的消息响应函数是无法被触发的,估计是软件BUG,所以最好是在选定了相应的控件后点击项目栏下添加相应变量与类向导。下面附上2、的详细步骤:以对话框程序为例,下面试着在vs2010下使用该控件(控件在使用之前必须要注册)。第一步:创建对话框程序,画好编辑框等控件。第二步:插入MSCOMM控件,添加控件相关的类。并为控件添加好变量。第三步:添加消息处理函数,这里要注意的是MSCOMM控件的响应函数要右击控件选择添加事件处理函数,消息类型选择为OnComm类型。下面是各个函数的实现:1.//发送按钮按下响应函数2.voidCCommTeatDlg::OnBnClickedButton3()3.{4.UpdateData(TRUE);5.m_mscomm.put_Output(COleVariant(m_EditSend));//向串口下发数据6.m_EditSend.Empty();//将编辑框内容清空7.UpdateData(FALSE);8.}1.voidCCommTeatDlg::OnBnClickedButton2()2.{3.m_mscomm.put_PortOpen(FALSE);//关闭串口4.AfxMessageBox(_T(串口已关闭));//显示提示窗口5.}1.voidCCommTeatDlg::OnBnClickedButton1()2.{3.if(m_mscomm.get_PortOpen())//检测串口是否已经打开4.{5.m_mscomm.put_PortOpen(FALSE);//若串口已经打开,则关闭串口6.}7.m_mscomm.put_CommPort(1);//打开串口18.m_mscomm.put_InBufferSize(1024);//串口接收缓冲区大小9.m_mscomm.put_OutBufferSize(1024);//串口发送缓冲去大小10.m_mscomm.put_InputLen(0);//数据发送长度11.m_mscomm.put_InputMode(1);//数据发送模式12.m_mscomm.put_RThreshold(1);//13.m_mscomm.put_Settings(_T(4800,n,8,1));//串口设置14.if(!m_mscomm.get_PortOpen())//检测串口是否打开,若关闭则打开串口15.{16.m_mscomm.put_PortOpen(TRUE);17.AfxMessageBox(_T(打开串口成功));18.}19.else20.{21.m_mscomm.put_OutBufferCount(0);//清空输出缓冲区22.AfxMessageBox(_T(打开串口失败));//提示串口打开失败23.}24.}特别注意一下这段:1.BEGIN_EVENTSINK_MAP(CCommTeatDlg,CDialogEx)2.ON_EVENT(CCommTeatDlg,IDC_MSCOMM1,1,CCommTeatDlg::OnCommMscomm1,VTS_NONE)3.END_EVENTSINK_MAP()1.voidCCommTeatDlg::OnCommMscomm1()2.{3.staticunsignedintcnt=0;4.VARIANTvariant_inp;5.COleSafeArraysafearryay_inp;6.longlen,k;7.unsignedintdata[1024]={0};8.byterxdata[1024];9.CStringstremp;10.if(m_mscomm.get_CommEvent()==2)11.{12.cnt++;13.variant_inp=m_mscomm.get_Input();14.safearryay_inp=variant_inp;15.len=safearryay_inp.GetOneDimSize();16.for(k=0;klen;k++)17.{18.safearryay_inp.GetElement(&k,rxdata+k);19.}20.for(k=0;klen;k++)21.{22.stremp.Format(_T(%c),*(rxdata+k));23.m_EditReceive+=stremp;24.CStringtemp=_T(\r\n);25.m_EditReceive+=temp;26.}27.}28.UpdateData(FALSE);29.}
本文标题:MSComm控件在VS2010中应用
链接地址:https://www.777doc.com/doc-2889090 .html