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

📄 comdbgdoc.cpp

📁 一个VC++编写的串口通信程序
💻 CPP
字号:
// ComDbgDoc.cpp : implementation of the CComDbgDoc class
//

#include "stdafx.h"
#include "ComDbg.h"

#include "ComDbgDoc.h"
#include "RecvView.h"
#include "SendView.h"
#include "DlgSetCom.h"

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

/////////////////////////////////////////////////////////////////////////////
// CComDbgDoc

IMPLEMENT_DYNCREATE(CComDbgDoc, CDocument)

BEGIN_MESSAGE_MAP(CComDbgDoc, CDocument)
	//{{AFX_MSG_MAP(CComDbgDoc)
	ON_COMMAND(ID_EDIT_CLEARRECV, OnEditClearrecv)
	ON_COMMAND(ID_EDIT_CLEARSEND, OnEditClearsend)
	ON_COMMAND(ID_SET_COM, OnSetCom)
	ON_COMMAND(ID_SET_CLOSEPORT, OnSetCloseport)
	ON_UPDATE_COMMAND_UI(ID_SET_CLOSEPORT, OnUpdateSetCloseport)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CComDbgDoc construction/destruction

CComDbgDoc::CComDbgDoc()
{
	// TODO: add one-time construction code here

}

CComDbgDoc::~CComDbgDoc()
{
}

BOOL CComDbgDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CComDbgDoc serialization

void CComDbgDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CComDbgDoc diagnostics

#ifdef _DEBUG
void CComDbgDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CComDbgDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CComDbgDoc commands

BOOL CComDbgDoc::SaveModified() 
{
	return TRUE;
}

CView* CComDbgDoc::GetView(const CRuntimeClass *pClass)
{
	CView*	pView=NULL;
	POSITION	pos=NULL;
	pos=GetFirstViewPosition();
	while(pos)
	{
		pView=GetNextView(pos);
		if(pView->IsKindOf(pClass))
		return pView;
	}
	return NULL;
}

void CComDbgDoc::OnEditClearrecv() 
{
	CRecvView* pView=(CRecvView*)GetView(RUNTIME_CLASS(CRecvView));
	if(pView != NULL)	pView->Clear();
}

void CComDbgDoc::OnEditClearsend() 
{
	CSendView* pView=(CSendView*)GetView(RUNTIME_CLASS(CSendView));
	if(pView != NULL)	pView->Clear();
}

void CComDbgDoc::OnSetCom() 
{
	CDlgSetCom	dlg(m_com.m_nCom,m_com.m_nbps);
	if(dlg.DoModal() == IDOK)
	{
		CWaitCursor	wait;
		CRecvView* pView=(CRecvView*)GetView(RUNTIME_CLASS(CRecvView));
		ASSERT(pView != NULL);
		pView->StopRecv();
		pView->Clear();
		m_com.SetCom(dlg.m_ncom);
		m_com.SetBps(dlg.m_nbps);
		m_com.SetByteSize(dlg.m_nbytesize);
		m_com.SetParity(_PARITY[dlg.m_iParity]);
		m_com.SetStopBits(_STOPBITS[dlg.m_iStopBits]);
		if(!m_com.Open())
		{
			AfxStopBox(_T("打开端口失败!"));
			return;
		}
		pView->StartRecv();
	}
}

void CComDbgDoc::OnSetCloseport() 
{
	CWaitCursor	wait;
	CRecvView* pView=(CRecvView*)GetView(RUNTIME_CLASS(CRecvView));
	ASSERT(pView != NULL);
	pView->StopRecv();
	m_com.Close();
}

void CComDbgDoc::OnUpdateSetCloseport(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(m_com.IsOpened());	
}


void CComDbgDoc::OnCloseDocument() 
{
	OnSetCloseport();
	CDocument::OnCloseDocument();
}

⌨️ 快捷键说明

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