MSComm控件在基于单文档中的应用

本文配套源码下载

MSComm 作为一个串行通讯控件为程序员串口通讯编程节省了很多时间。在基于对话框的应用中加入一个MSComm控件非常简单。只需进行以下操作即可:

打开“Project->Add To Project->Components and Controls->Registered Activex Controls”,然后选择控件:Microsoft Communication Control,version 6.0插入到当前的工程中。这样就将类 CMSComm 的相关文件 mscomm.cpp 和 mscomm.h 一并加入到了工程中。编程时只需将控件对话中的 MSComm 控件拖至你的应用对话框中就OK了。

对于单文档的工程应用,如果Project中的视类是基于CFormView的,创建MSComm类的方法和基于对话框的操作没什么两样。而如果视类不是基于CFormView的,那么创建MSComm类就和创建普通的ActiveX控件相类似。

1.在MscommDemoView.h中添加MSComm类声明:

protected:
CMSComm m_Comm;

2.利用MFC ClassWizard添加CMscommDemoView::OnCreate函数并加入以下代码:DWORD style=WS_VISIBLE|WS_CHILD;
if(!m_Comm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM));
{
  TRACE0("Failed to create OLE Communication Controls!\n");
  return -1;
}

ID_MSCOMM 是源于对话框的中的控件ID规则,而且必须和 MSComm 控件对应,这里利用 About 对话框。把控件对话框中 MSComm 控件拖至 About 对话框。ID值为ID_MSCOMM。

3.串口初始化:m_Comm.SetCommPort(1);
m_Comm.SetInputMode(1);
m_Comm.SetSettings("9600,n,8,1");
m_Comm.SetRThreshold(1);
m_Comm.SetInputLen(0);
if(!m_Comm.GetPortOpen())
{
  m_Comm.SetPortOpen(TRUE);
}
else
  AfxMessageBox(“Open The Serial Port 1 Failurre!”);
m_Comm.GetInput();

4.串口接收数据初始化:

MSComm 控件采用查询或事件驱动的方式从端口获取数据。这里采用事件驱动法完成对端口数据的监视和处理:有事件发生(串口接收到数据)时通知程序,并及时的捕获和处理这个通讯事件。

在MscommDemoView.h中添加事件驱动说明:protected:
  afx_msg void OnComm();
DECLARE_EVENTSINK_MAP()

在 MscommDemoView.cpp 中添加事件的驱动:BEGIN_EVENTSINK_MAP(CMscommDemoView, CView)
  //{{AFX_EVENTSINK_MAP(CAboutDlg)
ON_EVENT(CMscommDemoView,IDC_MSCOMM,1,OnComm,VTS_NONE)
  //}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

时间: 2024-08-07 22:11:56

MSComm控件在基于单文档中的应用的相关文章

利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出

我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的博客介绍过几篇关于Aspose.Word控件和Aspose.Cell控件的使用操作,如下所示. <使用Aspose.Cell控件实现Excel高难度报表的生成(一)> <使用Aspose.Cell控件实现Excel高难度报表的生成(二)> <使用Aspose.Cell控件实现Ex

多文档-dsoframer控件显示多个文档,如何预览打印其中的一个文档?

问题描述 dsoframer控件显示多个文档,如何预览打印其中的一个文档? dsoframer控件目前使用 Me.AxFramerControl1.Activate()语句可以显示并编辑多个文档,请问怎么能预览打印其中的一个WORD? 解决方案 自己顶一下.大侠们帮忙啊.

c++-C++基于单文档序列化的删除操作为什么实现不了?

问题描述 C++基于单文档序列化的删除操作为什么实现不了? 为什么这段代码不能实现删除操作,应该怎样才能实现? 解决方案 delete只是释放变量,没有删除的功能.你可以增加一个字段,表示是否删除.删除的时候标记下这个字段.加载文档的时候不加载它,实现伪删除. 伪删除很常见,数据库系统都是这么做的.这种方法很高效. 如果你想真正删除,那只有把文件清空,然后重新序列化一次. 解决方案二: 单文档及文档的序列化

dsoframer ocx控件-dsoframer.ocx控件在线编辑Word文档,当单击保存到服务器的按钮时,出现会话丢失

问题描述 dsoframer.ocx控件在线编辑Word文档,当单击保存到服务器的按钮时,出现会话丢失 Java中使用了dsoframer.ocx控件在线编辑Word文档,当单击保存到服务器的按钮时,出现会话丢失,得重新登陆帐号,有没有人遇到我同样的问题,怎么解决?

代码合并-MFC把对话框添加到单文档中

问题描述 MFC把对话框添加到单文档中 MFC把对话框添加到单文档中,对话框已经在单文档下做好了,但是代码怎么加呢,代码需要加在什么地方呢?求大神帮忙,Vc作业,急需,谢谢.QQ:291119478 解决方案 这个很简单,你有两个办法: 思路1:新建单文档项目,然后最后一步让View从CFormView继承.产生的程序文档视图就是一个对话框界面,在资源中你可以看到这个对话框,把控件放进来,用ClassWizard映射好成员变量和事件处理程序,然后把代码粘贴过来. 思路2:将对话框程序的源代码和对

保存数据-MSComm控件串口接收数据存到txt中出现乱码

问题描述 MSComm控件串口接收数据存到txt中出现乱码 我在用C++做一个串口程序,用了MSComm控件,新手遇见了点问题,我用串口助手试了试我的程序,如果十六进制发送那么我接收的数据和串口助手发送的数据不一致,出现了乱码.我还想把我接收到的数据存储在txt文件中,可能是我数据类型没有转换对,txt文件里的接收数据也是乱码,不知道哪位能指点一下. void CSendcomDlg::OnComm() { // TODO: Add your control notification handl

cstring-vs2010,如何为MFC单文档中的编辑框的ID关联一个CString变量?

问题描述 vs2010,如何为MFC单文档中的编辑框的ID关联一个CString变量? vs2010,如何为MFC单文档中的编辑框的ID关联一个CString变量? 解决方案 直接用class wizard去映射,在项目菜单下. 解决方案二: 编辑框.右键选择...设置.. 解决方案三: DDX_Text(pDX, IDC_STATIC1, m_strText);

希望高手帮忙解答-在MFC单文档中完成 c++编程

问题描述 在MFC单文档中完成 c++编程 在MFC 单文档中,点击菜单 在客户区域出现随机大小随机颜色的矩形 代码 解决方案 是要以新的窗口出现呢,还是要直接显示在当前窗口呢?随机的范围是多少

MFC 单文档中动态添加菜单项和响应菜单事件

新建一个单文档程序 在查看菜单项中增加两个子菜单,分别为隐藏工具栏(ID_HIDE),新建菜单(ID_NEWMENU) 在Resource.h中增加一个ID_NEWMENU宏 #define ID_NEWMENU        WM_USER+101   操作工具栏和状态栏 使用GetDescendantWindow函数获取工具栏和状态栏的指针 为ID_HIDE添加消息映射,编辑代码如下 static bool m_Hide=false; m_Hide=!m_Hide; //获取工具栏指针 CW