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

📄 monitorview.cpp

📁 模拟了tec2000的所有功能
💻 CPP
字号:



// ************************************************************************************
//本页内容包括界面类CMonitorView,完成功能:1.响应用户键盘输入,并将用户输入的字符写入到
//串口,以便Tec2000接收运行监控命令。2.接收Tec2000通过串口发送过来的内容,并将其显示在编
//辑视图中,以便用户观察.
//                 
//                   版本:V3.0
//                   作者:徐胜强(031221112)
//                   日期:2005年12月5日
//
//
//***************************************************************************************
#include "stdafx.h"
#include "Monitor.h"

#include "MonitorDoc.h"
#include "MonitorView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CMonitorView

IMPLEMENT_DYNCREATE(CMonitorView, CEditView)

BEGIN_MESSAGE_MAP(CMonitorView, CEditView)
	//{{AFX_MSG_MAP(CMonitorView)
	ON_WM_CHAR()                                       //消息映射
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CEditView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CEditView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CEditView::OnFilePrintPreview)
	ON_MESSAGE(WM_COMMNOTIFY,OnCommNotify)              //   消息映射
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMonitorView construction/destruction

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

}

CMonitorView::~CMonitorView()
{
}

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

	BOOL bPreCreated = CEditView::PreCreateWindow(cs);
	cs.style &= ~(ES_AUTOHSCROLL|WS_HSCROLL);	// Enable word-wrapping

	return bPreCreated;
}

/////////////////////////////////////////////////////////////////////////////
// CMonitorView drawing

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

/////////////////////////////////////////////////////////////////////////////
// CMonitorView printing

BOOL CMonitorView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default CEditView preparation
	return CEditView::OnPreparePrinting(pInfo);
}

void CMonitorView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
	// Default CEditView begin printing.
	CEditView::OnBeginPrinting(pDC, pInfo);
}

void CMonitorView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
	// Default CEditView end printing
	CEditView::OnEndPrinting(pDC, pInfo);
}

/////////////////////////////////////////////////////////////////////////////
// CMonitorView diagnostics

#ifdef _DEBUG
void CMonitorView::AssertValid() const
{
	CEditView::AssertValid();
}

void CMonitorView::Dump(CDumpContext& dc) const
{
	CEditView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// 处理WM_COMMNOTIFY消息,读取串口接收缓冲区内的字符,并将其显示到编辑视图中
LRESULT CMonitorView::OnCommNotify(WPARAM wParam,LPARAM lParam)
{
	char buffer[MAXBLOCK/4];                     
	CString str;
	int nLength,nTextLength;
	CMonitorDoc *pDoc=GetDocument();
	CEdit &edit=GetEditCtrl();
	if(!pDoc->m_bConnected||(wParam&EV_RXCHAR)!=EV_RXCHAR)
	{
		SetEvent(pDoc->m_hPostMsgEvent);
		return 0L;
	}
	nLength=pDoc->ReadPort(buffer,10);                  //读出串口接收缓冲区字符
	if(nLength)
	{
		nTextLength=edit.GetWindowTextLength();
		edit.SetSel(nTextLength,nTextLength);
		for(int i=0;i<nLength;i++)
		{   //分析接收到的字符
			switch(buffer[i])
			{
				case'\n':                    //回车换行
					str+="\r\n";
					break;
				case'\b':                    //退格
					edit.SetSel(-1,0);
					edit.ReplaceSel(str);
					nTextLength=edit.GetWindowTextLength();
					edit.SetSel(nTextLength-1,nTextLength);
					edit.ReplaceSel("");
					str="";
					break;
				default:str+=buffer[i];
			}
		}
		edit.SetSel(-1,0);
		edit.ReplaceSel(str);
	}
	//将m_hPostMsgEvent置为无信号,允许监控线程发送下一个WM_COMMNOTIFY消息
	SetEvent(pDoc->m_hPostMsgEvent);
	return 0L;
}
//键盘输入响应函数,将用户输入的字符写入到串口
void CMonitorView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	CMonitorDoc *pDoc=GetDocument();
	char c=(char)nChar;
	if(!pDoc->m_bConnected) return;
	char backspace=0x7f;
	if(c=='\b')   //如果是退格,这是为了防止删除界面上“>”符号
	  pDoc->WritePort(&backspace,1);
	else
      pDoc->WritePort(&c,1);
 
}

 

⌨️ 快捷键说明

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