注册通行证 用户名 密码
  • 文章投稿
  • 博客
  • 论坛
  • 设为首页
  • 加入收藏
jztop.com网络技术
  • 首页
  • | iT新闻
  • | 操作系统
  • | 组网建网
  • | 网络安全
  • | 程序开发
  • | 办公一族
  • | 工具软件
  • | 网页制作
  • | 多媒体制作
  • | 网吧技术
  • | 服务器
  • | 专题教程
Vista | 软件评测 | 系统备份 | 优化 | 进程 | 聊天 | 病毒 | Linux | 黑客 | 防火墙 | 数据库 | Web开发 | Java | Word | 游戏 | 32位开发 | 移动开发
当前位置:首页 > 程序开发 > 微软开发专栏 > VC.NET 内容正文:深入浅出VC++串口编程之基于控件

深入浅出VC++串口编程之基于控件

发布时间:2006-02-21 10:20:21 来源:天极开发 网友评论 0 条
  为了处理接收事件,我们需要为MScomm控件添加对应的消息处理函数。如下图,我们通过"MFC类向导"添加了CSerialPortActivexDlg 类的成员函数OnCommMscomm1():

  这样,在对话框的头文件中就会自动增加下面两句:

afx_msg void OnCommMscomm1();//函数声明
DECLARE_EVENTSINK_MAP()

  来自AFX_MSG部分:

// Generated message map functions
//{{AFX_MSG(CSerialPortActivexDlg)
 virtual BOOL OnInitDialog();
 afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
 afx_msg void OnPaint();
 afx_msg HCURSOR OnQueryDragIcon();
 afx_msg void OnClearButton();
 afx_msg void OnSendButton();
 afx_msg void OnCommMscomm1();
 DECLARE_EVENTSINK_MAP()
//}}AFX_MSG

  同时在对话框的.cpp文件中会增加下列代码实现串口消息映射:

BEGIN_EVENTSINK_MAP(CSerialPortActivexDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CSerialPortActivexDlg)
 ON_EVENT(CSerialPortActivexDlg, IDC_MSCOMM1, 1 /* OnComm */,
 OnCommMscomm1, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

  我们定义CSerialPortActivexDlg::OnCommMscomm1()函数主要处理数据的接收,其源代码为:

void CSerialPortActivexDlg::OnCommMscomm1()
{
 // TODO: Add your control notification handler code here
 UpdateData(true);

 VARIANT variant_inp;
 COleSafeArray safearray_inp;

 long i = 0;
 int len;
 char rxdata[1000];
 CString tmp;
 switch (m_mscom.GetCommEvent())
 {
  case 2:
  //表示接收缓冲区内有字符
  {
   variant_inp = m_mscom.GetInput();
   safearray_inp = variant_inp;
   len = safearray_inp.GetOneDimSize();
   for (i = 0; i < len; i++)
   {
    safearray_inp.GetElement(&i, &rxdata[i]);
   }
   rxdata[i] = '/0';
  }
  m_recv += rxdata;
  UpdateData(false);
  break;
  default:
   break;
}
}

  最后,与连载三类似,再次借助"串口调试助手"以实例验证了本程序的正确性,如下图:


  最后,需要特别提示的是:如果要在基于"文档/视图"的框架结构程序而非对话框程序中使用串口控件,我们不能轻松地使用"MFC类向导",这时候必须手动地添加相关代码。

  在MainFrm.h头文件中加入:

afx_msg void OnCommMscomm();
DECLARE_EVENTSINK_MAP()

  并定义CMSComm成员变量:

CMSComm m_ComPort;

  在MainFrm.cpp文件中添加

BEGIN_EVENTSINK_MAP(CMainFrame, CFrameWnd)
ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE)
//映射ACTIVEX控件的事件
END_EVENTSINK_MAP()

  在MainFrm.cpp文件的OnCreate(LPCREATESTRUCT lpCreateStruct)函数中添加:

ComPort.Create(NULL, WS_VISIBLE | WS_CHILD, CRect(0,0,0,0),this, ID_COMMCTRL);

  以创建CMSComm控件。

  此后,我们就可以在CMainFrame类的函数中使用串口控件对应的ComPort控件成员变量。

  单击此处下载本文实例工程源代码。
 2/2   |‹ ‹‹ 1 2
相关文章
  • 深入浅出VC++串口编程之基于Win32 API
  • 深入浅出VC++串口编程之DOS的串口编程
  • ASP.NET2.0中数据源控件之异步数据访问
  • 深入浅出VC++串口编程之基本概念
  • 利用VC++实现AVI文件的合成和分解
【评论】【收藏本文】【打印】【关闭】
上一篇文章:深入浅出VC++串口编程之基于Win32 API
下一篇文章:深入浅出VC++串口编程之第三方类
讨论区
查看
已有 0 位对此新闻感兴趣的网友发表了看法
匿名发表
注册通行证 登陆
图文阅读推荐
用VC获取其它程序的命令行参数
用VC获取其它程序的命令行参数
用Visual C++设计QQ群管理工具
用Visual C++设计QQ群管理工具
推荐阅讯
  • Visual C#中使用XML之实现DOM
  • 用VC实现对超长数据库字段的操作
  • 用DLL控制Windows中进程的方法
  • 在Visual C#中使用XML之编写XML
  • 在VC中使用Windows管道技术编程
  • 在VC中添加响应自定义的消息的代码步骤
  • VC.NET实现清爽便利的Windows游戏窗口
  • Visual C#构建网络计算机树形图
  • 利用VC# 2005为数码照片添加拍照日期
  • 用Visual C++实现QQ界面的模拟
阅读排行
  • 1.VC++编程实现广告窗口自动关闭
  • 2.深入浅出VC++串口编程之基于控件
  • 3.解读VC++编程中的文件操作API和CFile类
  • 4.利用Visual C#实现ICMP网络协议
  • 5.深入浅出VC++串口编程之第三方类
  • 6.掀起你的盖头来——谈VC++对象模型
  • 7.Visual C#中用WMI控制远程计算机
  • 8.深入浅出VC++串口编程之基于Win32 API
  • 9.Visual C++2005中开发自定义绘图控件
  • 10.深入浅出VC++串口编程之基本概念
专题教程
  • 大话G游 专题:手机病毒揭密
  • ARP攻击防范与解决方案 路由故障处理手册
  • Picasa中文版_Picasa教程 专题:清除流氓软件
  • Firefox专题 seo搜索引擎优化专区
  • 重装Windows必知的事情 装机之必备软件大行动
病毒专杀栏
  • 杀毒软件反被病毒杀 连"救命"都不能喊
  • 金山ARP防火墙
  • 还原卡神话破灭“机器狗”病毒来势汹汹
  • cctv经济半小时:你的手机现在安全吗?
  • 新挂马方式开始流行 ARP挂马称雄局域网
  • 木马和病毒清除的通用解法
  • IP地址不再冲突 查找ARP攻击者元凶
  • 教你几招识别和防御Web网页木马
  • 分析:封杀BT只是暂时的止痛药
  • QQ爆危险漏洞,“QQ游戏邀请大盗”邀请你玩病
关于我们 | 诚聘英才 | 联系我们 | 版权声明 | 网站大事 | 网站地图 | 意见建议
CopyRight 2005-2007 Jztop.Com 版权所有 未经许可 请勿转载