📄 terminatorview.cpp
字号:
// TerminatorView.cpp : implementation of the CTerminatorView class
//
#include "stdafx.h"
#include "Terminator.h"
#include "TerminatorDoc.h"
#include "TerminatorView.h"
#include"MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CTerminatorView
IMPLEMENT_DYNCREATE(CTerminatorView, CEditView)
BEGIN_MESSAGE_MAP(CTerminatorView, CEditView)
//{{AFX_MSG_MAP(CTerminatorView)
ON_WM_CHAR()
ON_WM_CTLCOLOR_REFLECT()
ON_WM_KEYDOWN()
ON_COMMAND(IDM_TEXTCOLOR, OnTextcolor)
ON_COMMAND(IDM_BACKGROUNDCOLOR, OnBackgroundcolor)
//}}AFX_MSG_MAP
// Standard printing commands
ON_MESSAGE(WM_COMMNOTIFY, OnCommNotify)
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()
/////////////////////////////////////////////////////////////////////////////
// CTerminatorView construction/destruction
CTerminatorView::CTerminatorView()
{
// TODO: add construction code here
m_fontColor=RGB(0,0,255);
COLORREF cl;
cl=RGB(192,192,192);
m_backColor=cl;
m_brush.CreateSolidBrush(cl);
}
CTerminatorView::~CTerminatorView()
{
}
BOOL CTerminatorView::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;
}
/////////////////////////////////////////////////////////////////////////////
// CTerminatorView drawing
void CTerminatorView::OnDraw(CDC* pDC)
{
CTerminatorDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
/* CPen pen;
CPen *old;
pen.CreatePen(PS_SOLID,0,RGB(255,255,0));
old=pDC->SelectObject(&pen);
POINT pt;
pt.x=0;
pt.y=0;
pDC->MoveTo(pt);
pt.x=100;
pt.y=100;
pDC->LineTo(pt);
pDC->SelectObject(old);*/
}
/////////////////////////////////////////////////////////////////////////////
// CTerminatorView printing
BOOL CTerminatorView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default CEditView preparation
return CEditView::OnPreparePrinting(pInfo);
}
void CTerminatorView::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// Default CEditView begin printing.
CEditView::OnBeginPrinting(pDC, pInfo);
}
void CTerminatorView::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// Default CEditView end printing
CEditView::OnEndPrinting(pDC, pInfo);
}
LRESULT CTerminatorView::OnCommNotify(WPARAM wParam,LPARAM lParam)
{
//AfxMessageBox("receive the comm event");
char buf[MAXBLOCK/4];
CString str;
int nLength,nTextLength;
CTerminatorDoc* pDoc=GetDocument();
CEdit& edit=GetEditCtrl();
if(!pDoc->m_bConnected||(wParam&EV_RXCHAR)!=EV_RXCHAR)
{
SetEvent(pDoc->m_hPostMsgEvent);
return 0L;
}
nLength=pDoc->ReadComm(buf,100);
// CString str1;
// str1.Format(_T("%d"),nLength);
// AfxMessageBox(str1);
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;
}
/////////////////////////////////////////////////////////////////////////////
// CTerminatorView diagnostics
#ifdef _DEBUG
void CTerminatorView::AssertValid() const
{
CEditView::AssertValid();
}
void CTerminatorView::Dump(CDumpContext& dc) const
{
CEditView::Dump(dc);
}
CTerminatorDoc* CTerminatorView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CTerminatorDoc)));
return (CTerminatorDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CTerminatorView message handlers
void CTerminatorView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CTerminatorDoc* pDoc=GetDocument();
char c=(char)nChar;
if(!pDoc->m_bConnected)
{
AfxMessageBox("please open the connection first");
return;
}
pDoc->WriteComm(&c,1);
if(pDoc->m_bEcho)
CEditView::OnChar(nChar, nRepCnt, nFlags);
}
HBRUSH CTerminatorView::CtlColor(CDC* pDC, UINT nCtlColor)
{
// TODO: Change any attributes of the DC here
// COLORREF cl;
// cl=RGB(255,255,0);
// pDC->SetBkColor(m_backColor);
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(m_fontColor);
// m_brush.CreateSolidBrush(m_backColor);
// InvalidateRect(NULL);
return (HBRUSH)m_brush.GetSafeHandle();
// TODO: Return a non-NULL brush if the parent's handler should not be called
// return NULL;
}
void CTerminatorView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
this->Invalidate();
CEditView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CTerminatorView::NotifySetPane(UINT num,CString text)
{
CMainFrame* pwnd=(CMainFrame*)GetParent();
pwnd->SetPane(num,text);
}
void CTerminatorView::OnTextcolor()
{
CColorDialog clDlg;
if(clDlg.DoModal()==IDOK)
{
m_fontColor=clDlg.GetColor();
}
this->Invalidate();
}
void CTerminatorView::OnBackgroundcolor()
{
CColorDialog clDlg;
if(clDlg.DoModal()==IDOK)
{
m_backColor=clDlg.GetColor();
}
InvalidateRect(NULL);
}
//DEL BOOL CTerminatorView::OnEraseBkgnd(CDC* pDC)
//DEL {
//DEL CRect rect;
//DEL CBrush brush;
//DEL brush.CreateSolidBrush(m_backColor);
//DEL pDC->GetClipBox(rect);
//DEL pDC->FillRect(rect,&brush);
//DEL return true;
//DEL
//DEL // return CEditView::OnEraseBkgnd(pDC);
//DEL }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -