
深入浅出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控件成员变量。
单击此处下载本文实例工程源代码。
推荐阅讯
- 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必知的事情 装机之必备软件大行动
病毒专杀栏

