⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scommtestview.cpp

📁 MSComm在MFC的单文档中的应用
💻 CPP
字号:
// sCommTestView.cpp : implementation of the CSCommTestView class
//

#include "stdafx.h"
#include "sCommTest.h"

#include "sCommTestDoc.h"
#include "mscomm.h"
#include "sCommTestView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSCommTestView

IMPLEMENT_DYNCREATE(CSCommTestView, CView)

BEGIN_MESSAGE_MAP(CSCommTestView, CView)
	//{{AFX_MSG_MAP(CSCommTestView)
	ON_WM_CREATE()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

BEGIN_EVENTSINK_MAP(CSCommTestView, CView)
    //{{AFX_EVENTSINK_MAP(CAboutDlg)
	ON_EVENT(CSCommTestView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSCommTestView construction/destruction

CSCommTestView::CSCommTestView()
{
	// TODO: add construction code here

}

CSCommTestView::~CSCommTestView()
{
}

BOOL CSCommTestView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CSCommTestView drawing

void CSCommTestView::OnDraw(CDC* pDC)
{
	CSCommTestDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CSCommTestView printing

BOOL CSCommTestView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CSCommTestView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CSCommTestView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CSCommTestView diagnostics

#ifdef _DEBUG
void CSCommTestView::AssertValid() const
{
	CView::AssertValid();
}

void CSCommTestView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CSCommTestDoc* CSCommTestView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSCommTestDoc)));
	return (CSCommTestDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSCommTestView message handlers

int CSCommTestView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);
	
	if(m_MSComm.GetPortOpen()) //如果串口是打开的,则行关闭串口
		m_MSComm.SetPortOpen(FALSE);

	m_MSComm.SetCommPort(1); //选择COM?
	m_MSComm.SetInBufferSize(1024); //接收缓冲区
	m_MSComm.SetOutBufferSize(1024);//发送缓冲区
	m_MSComm.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取
	m_MSComm.SetInputMode(1);//以二进制方式读写数据
	m_MSComm.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
	m_MSComm.SetSettings("9600,n,8,1");//波特率9600无检验位,8个数据位,1个停止位

	if(!m_MSComm.GetPortOpen())//如果串口没有打开则打开
		m_MSComm.SetPortOpen(TRUE);//打开串口
	else
		AfxMessageBox("Open Serial Port Failure!");
	m_MSComm.GetInput(); //先预读缓冲区以清除残留数据
	
	return 0;
}
void CSCommTestView::OnComm() 
{
	// TODO: Add your control notification handler code here
	CString strtemp;
	strtemp.Format("OK,I've received some data!\r\n");
	m_MSComm.SetOutput(COleVariant(strtemp));//发送数据
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -