一、初始化并打开串口
1.新建一个名为“MSCommDemo”的单文档应用程序,加入MSComm控件,方法见“20120904-加载MSComm控件的方法”一文。
2.在视图类头文件MSCommDemoView.h中的头部加入如下语句
#include "mscomm.h"
3.点击View->ClassWizard,创建CMscommDemoView类中点击WM_CREATE,创建消息响应函数,添加如下语句
int CMSCommDemoView::OnCreate(LPCREATESTRUCT lpCreateStruct) { 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 Control!\n");//创建不成功时报错 return -1; } return 0; }
4.注意:IDC_MSCOMM是MSComm控件的ID号。
5.把MSComm控件拖到About对话框中。
6.初始化串口。在OnCreate函数中添加如下代码
m_Comm.SetCommPort(3); m_Comm.SetInputMode(1); m_Comm.SetSettings("9600,n,8,1"); m_Comm.SetSThreshold(1); m_Comm.SetInputLen(0); if (!m_Comm.GetPortOpen()) { m_Comm.SetPortOpen(TRUE); } else AfxMessageBox("Open The Serial Port 1 Failurre!"); m_Comm.GetInput();
二、捕获串口事件
1.在MSCommDemoView.h中添加
protected: //{{AFX_MSG(CMSCommDemoView) afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnComm(); DECLARE_EVENTSINK_MAP(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
2.在MSCommDemoView.cpp中添加事件驱动
BEGIN_EVENTSINK_MAP(CMSCommDemoView,CView) ON_EVENT(CMSCommDemoView,IDC_MSCOMM,1,OnComm,VTS_NONE) END_EVENTSINK_MAP()
三、串口数据读写
1.为CMSCommDemoView类添加OnComm函数
void CMSCommDemoView::OnComm() { VARIANT m_input; char *str,*str1; int k,nEvent,i; CString str2,m_RcvData; nEvent=m_Comm.GetCommEvent(); switch (nEvent) { case 2: k=m_Comm.GetInBufferCount(); if (k>0) { m_input=m_Comm.GetInput(); str=(char*)(unsigned char*)m_input.parray->pvData; } i=0; str1=str; while (i<k) { i++; str1++; } *str1='\0'; str2=(const char*)str; m_RcvData=(const char*)str; break; } }
2..为CMSCommDemoView类添加SendData函数
void CMSCommDemoView::SendData() { int i,Count; CString m_SendData; m_SendData="Hello"; Count=m_SendData.GetLength(); CByteArray m_Array; m_Array.RemoveAll(); m_Array.SetSize(Count); for (i=0;i<Count;i++) { m_Array.SetAt(i,m_SendData[i]); } m_Comm.SetOutput(COleVariant(m_Array)); }
小结:本程序上传至我的资源当中。