📄 terminalview.cpp
字号:
// TerminalView.cpp : implementation of the CTerminalView class
//
#include "stdafx.h"
#include "Terminal.h"
#include "TerminalDoc.h"
#include "TerminalView.h"
//#include "MainFrm.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_WM_CHAR()
ON_COMMAND(ID_VIEW_SEND, OnViewSend)
ON_UPDATE_COMMAND_UI(ID_VIEW_SEND, OnUpdateViewSend)
//}}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()
/////////////////////////////////////////////////////////////////////////////
// CTerminalView construction/destruction
CTerminalView::CTerminalView()
{
// TODO: add construction code here
}
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
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_bEcho)
CEditView::OnChar(nChar, nRepCnt, nFlags);
if(!pDoc->m_bConnected)
return;
pDoc->WriteComm(&c,1);
}
LRESULT CTerminalView::OnCommNotify(WPARAM wParam,LPARAM lParam)
{
char buf[MAXBLOCK/4];
CString str;
int nLength,nTextLength;
CTerminalDoc* pDoc=GetDocument();
CEdit& edit=GetEditCtrl();
DWORD lpEvtMask=EV_RXCHAR;//DSR;
if(!GetCommMask(pDoc->m_hCom,&lpEvtMask)){//!!(pDoc->m_bConnected||(wParam&EV_RXCHAR)
SetEvent(pDoc->m_hPostMsgEvent);
return 0L;
}
nLength=pDoc->ReadComm(buf,MAXBLOCK/4);//100);
if(nLength){
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);
return 0L;
}
void CTerminalView::OnViewSend()
{
// TODO: Add your command handler code here
CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CMyStatusBar* pStatus=(CMyStatusBar*)&pFrame->m_wndStatusBarMy;
CTerminalDoc* pDoc=GetDocument();
if(!pDoc->m_bConnected)
return;
CFileDialog fdlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,
"Text files(*.txt)|*.txt|All files(*.*)|*.*|Word documents(*.doc)|*.doc||",
NULL);
if(fdlg.DoModal()==IDOK){
CString str=_T("");
CFile cf;
cf.Open(fdlg.GetPathName(),CFile::modeRead);
CArchive ar(&cf,CArchive::load,4096,NULL);
TCHAR buf[2048];//CArchive::store
int nCount;
DWORD dwFileSize=::GetFileSize((HANDLE)ar.GetFile()->m_hFile,NULL);
int nn=0;
while((ar.Read(buf,2048))){
if((nCount=pDoc->WriteComm(buf,2048))==0)
break;
nn+=nCount;
pStatus->SetPaneText(0,"Sending FileData");
//m_wndStatusBarMy.SetPaneText(0,"Sending Data");
pStatus->m_Progress.SetPos(nn*200/dwFileSize);
//m_StatusBar.m_Progress.SetPos(nn++);
if(pDoc->m_bEcho){
GetWindowText(str);
//if(nCount<2048)
for(int i=0;i<nCount;i++)
str+=buf[i];
//else
//str+=buf;
SetWindowText(str);
//edit.ReplaceSel(str);
}
//str=_T("");
}
ar.Close();
cf.Close();
}
pStatus->SetPaneText(0,"Ready");
pStatus->m_Progress.SetPos(0);
}
void CTerminalView::OnUpdateViewSend(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
CTerminalDoc* pDoc=GetDocument();
pCmdUI->Enable(pDoc->m_bConnected);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -