无对话框通讯程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
无对话框通讯程序 最近,在互联网上发现许多Visual C++爱好者求助如何使用MSComm串行通讯控件,笔者也读到过一些关于使用MSComm通讯控件的文章,大部分只是从表面上泛泛地做了介绍,没有涉及到真正的程序实现,读者仍然无法使通讯控件工作起来。其实,在VC++6.0中使用通讯控件,还必须了解COleVariant与动态数组等一些知识。现在我单位正与济宁二号煤矿合作开发“井下采区变电所微机集中监控系统”,我所选用的开发环境即为Visual C++6.0,其中的通讯功能都是由MSComm通讯控件完成的,本人希望能通过本文将在程序开发过程中的一些体会和心得奉献给广大读者。 在Visual C++6.0中使用串行通讯控件,至少应该从以下几个方面进行考虑: 1.如何引入通讯控件 如果使用的是其他可视化程度较高编程语言,如VB、C++ Builder或Delphi等,通讯控件可以被直接引入到任意某个窗体之中,而使用Visual C++时,只有通过对话框资源编辑器来引入通讯控件到对话框中或由CFormView派生而来的视图中。如果选择的对话框是模态的,则在使用通讯控件时必须打开该对话框,这对于基于对话框的应用程序使用十分方便。如果不想使用对话框的话,则可将程序的视图类设计为由CFormView派生而来的视图。CFormView与相应的对话框资源相关联,具有很多对话框的特点,这样,我们可以将通讯控件直接引入到程序视图之中。后面这种方法的缺点是视图的使用受到了很大的限制。下面介绍另外一种使用比较方便,且更加有效的方法。 同样,我们还是将通讯控件引入到对话框中,只是将对话框做成非模态的。如果没有其他需要的话,对话框中只包含通讯控件一个元素,且在程序执行时,该对话框始终处于不可视状态。设计时程序中任何地方,只要能访问到该对话框,就可使用其中的通讯控件。下面介绍非模态对话框CCommDlg的制作及其使用方法,CCommDlg由CDialog派生而来。由于在程序执行过程中对话框是不可视的,用户不可能对其进行任何操作,因此不需要处理对话框的确定和取消按钮的响应消息。为了方便起见,只需向其中增加一个BOOL类型的成员函数Create(),定义如下: BOOL CCommDlg::Create() { return CDialog::Create(CCommDlg::IDD); } 另外,由于对话框是不可视的,必须通过对话框资源编辑器将其Visible属性设置掉。 由于主框架窗口CMainFrame是程序的主窗口,程序其他部分的代码很容易通过函数AfxGetMainWnd或其他方法访问到CMainFrame类型的成员,并程序的主窗口的C++对象和其窗口对象在程序的运行过程中总是有效的,直到程序运行结束才将其释放和析够。因此,我们可以在CMainFrame中增加一个指向CCommDlg类型的指针变量:CCommDlg * m_pCommDlg,在CMainFrame的OnCreate成员函数构造并创建该对话框,代码如下所示: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; …… m_pCommDlg = new CCommDlg(); if(!m_pCommDlg)return -1; m_pCommDlg-Create(); …… } m_pCommDlg对象创建成功后,其C++对象和窗口对象一直处于有效状态,直到程序结束时,才用下面的代码在CMainFrame的析够函数中将其释放: CMainFrame::~CMainFrame() { if(m_pCommDlg) { if(m_pCommDlg-GetSafeHwnd()) m_pCommDlg-DestroyWindow(); delete m_pCommDlg;?? } …… } 这样,在程序的执行过程中,我们就可以通过访问m_pCommDlg来访问通讯控件m_Comm,比如程序语句:m_pCommDlg-m_Comm.SetPortOpen(true)可以用来打开通讯端口。注意,上述存放通讯控件的对话框是不可视的,若想使其成为可视的,并能够完成一些如设置通讯控件的功能的话,还需要做一些额外的工作。 2.发送通讯数据 在Visual C++ 中,通讯控件发送数据的任务是由其接口成员函数SetOutput来实现的,该函数使用的参数是const VARIANT newValue。VARIANT其实是一个C++结构类型,COleVariant类型对VARI

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档