📄 monitorview.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 + -