📄 terminalview.cpp
字号:
// TerminalView.cpp : implementation of the CTerminalView class
//
#include "stdafx.h"
#include "Terminal.h"
#include "TerminalDoc.h"
#include "TerminalView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTerminalView
IMPLEMENT_DYNCREATE(CTerminalView, CEditView)
BEGIN_MESSAGE_MAP(CTerminalView, CEditView)
//{{AFX_MSG_MAP(CTerminalView)
ON_MESSAGE(WM_COMMNOTIFY, OnCommNotify)
ON_WM_CHAR()
ON_COMMAND(IDM_VIEW_CATE, OnViewCate)
ON_UPDATE_COMMAND_UI(IDM_VIEW_CATE, OnUpdateViewCate)
ON_COMMAND(IDM_VIEW_FULL, OnViewFull)
ON_UPDATE_COMMAND_UI(IDM_VIEW_FULL, OnUpdateViewFull)
//}}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)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CTerminalView construction/destruction
CTerminalView::CTerminalView()
{
// TODO: add construction code here
m_iViewMode = 0; // 0:全显示 1:按要求显示
}
CTerminalView::~CTerminalView()
{
}
BOOL CTerminalView::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;
}
/////////////////////////////////////////////////////////////////////////////
// CTerminalView drawing
void CTerminalView::OnDraw(CDC* pDC)
{
CTerminalDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CTerminalView printing
BOOL CTerminalView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default CEditView preparation
return CEditView::OnPreparePrinting(pInfo);
}
void CTerminalView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// Default CEditView begin printing.
CEditView::OnBeginPrinting(pDC, pInfo);
}
void CTerminalView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// Default CEditView end printing
CEditView::OnEndPrinting(pDC, pInfo);
}
/////////////////////////////////////////////////////////////////////////////
// CTerminalView diagnostics
#ifdef _DEBUG
void CTerminalView::AssertValid() const
{
CEditView::AssertValid();
}
void CTerminalView::Dump(CDumpContext& dc) const
{
CEditView::Dump(dc);
}
CTerminalDoc* CTerminalView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTerminalDoc)));
return (CTerminalDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTerminalView message handlers
LRESULT CTerminalView::OnCommNotify(WPARAM wParam, LPARAM lParam)
{
char buf[MAXBLOCK/4];
CString str = "";
CString strC1 = "", strC2 = "", strC3 = "", strC4 = "";
int nLength, nTextLength;
CTerminalDoc *pDoc=GetDocument();
CEdit &edit = GetEditCtrl();
if(!pDoc->m_bConnected || (wParam & EV_RXCHAR) != EV_RXCHAR) // 是否是EV_RXCHAR事件?
{
SetEvent(pDoc->m_hPostMsgEvent); // 允许发送下一个WM_COMMNOTIFY消息
return 0L;
}
nLength = pDoc->ReadComm(buf, 100);
//////////////////////////////////////////////////////////////////////////
char cPath[_MAX_PATH];
CString strPath = "";
GetModuleFileName(GetModuleHandle("Terminal.exe"),cPath,_MAX_PATH);
strPath = cPath;
strPath = strPath.Left(strPath.GetLength()-12) + CString(_T("SourceData.txt"));
CFile WriteFile;
CFileException fileException;
if( !WriteFile.Open( strPath, CFile::modeRead | CFile::modeWrite, &fileException) )
{
WriteFile.SeekToEnd();
WriteFile.Write(buf, nLength);
}
WriteFile.Close();
CString strTemp = buf;
if(nLength && m_iViewMode == 1)
{
int iPos = strTemp.Find("C1");
if(iPos != -1)
strC1 = strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1);
iPos = strTemp.Find("C2");
if(iPos != -1)
strC2 = strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1);
iPos = strTemp.Find("C3");
if(iPos != -1)
strC3 = strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1);
iPos = strTemp.Find("C4");
if(iPos != -1)
strC4 = strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1) + strTemp.GetAt(iPos + 1);
strTemp.Format("C1: %s\n, C2: %s\n, C3: %s\n, C4: %s\n", strC1, strC2, strC3, strC4);
if(!strC1.IsEmpty() || !strC2.IsEmpty() || !strC3.IsEmpty() || !strC4.IsEmpty())
{
edit.SetSel(-1, 0);
edit.ReplaceSel(strTemp);
//AfxMessageBox(strTemp);
SetEvent(pDoc->m_hPostMsgEvent);
return 0L;
}
}
//////////////////////////////////////////////////////////////////////////
if(nLength && m_iViewMode == 0)
{
nTextLength = edit.GetWindowTextLength();
edit.SetSel(nTextLength, nTextLength); //移动插入光标到正文末尾
for(int i = 0; i < nLength; i++)
{
switch(buf[i])
{
case '\r': // 回车
if(!pDoc->m_bNewLine)
break;
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;
case '\a': // 振铃
MessageBeep((UINT)-1);
break;
default :
str += buf[i];
}
}
edit.SetSel(-1, 0);
edit.ReplaceSel(str); // 向编辑视图中插入收到的字符
}
SetEvent(pDoc->m_hPostMsgEvent); // 允许发送下一个WM_COMMNOTIFY消息
return 0L;
}
void CTerminalView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CTerminalDoc* pDoc=GetDocument();
char c=(char)nChar;
if(!pDoc->m_bConnected)
return;
pDoc->WriteComm(&c, 1);
if(pDoc->m_bEcho)
CEditView::OnChar(nChar, nRepCnt, nFlags); // 本地回显
// CEditView::OnChar(nChar, nRepCnt, nFlags);
}
void CTerminalView::OnViewCate()
{
// TODO: Add your command handler code here
}
void CTerminalView::OnUpdateViewCate(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CTerminalView::OnViewFull()
{
// TODO: Add your command handler code here
}
void CTerminalView::OnUpdateViewFull(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -