2025-11-27 16:46:48 +09:00

191 lines
4.2 KiB
C++

// SerialView.cpp : implementation of the CSerialView class
//
#include "stdafx.h"
#include "Serial.h"
#include "SerialDoc.h"
#include "SerialView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSerialView
IMPLEMENT_DYNCREATE(CSerialView, CEditView)
BEGIN_MESSAGE_MAP(CSerialView, CEditView)
//{{AFX_MSG_MAP(CSerialView)
ON_WM_CTLCOLOR_REFLECT()
//}}AFX_MSG_MAP
ON_MESSAGE(IDM_OUTPUT, OnOutput)
ON_MESSAGE(IDM_BACKSPACE, OnBackspace)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSerialView construction/destruction
CSerialView::CSerialView()
{
m_font.m_hObject = NULL;
// Assign custom colours for the view
m_clrText = RGB(255, 255, 255); // while
m_clrBkgnd = RGB(0, 0, 128); // blue
m_brBkgnd.CreateSolidBrush(m_clrBkgnd);
}
CSerialView::~CSerialView()
{
if (m_font.m_hObject != NULL)
m_font.DeleteObject();
}
BOOL CSerialView::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;
}
/////////////////////////////////////////////////////////////////////////////
// CSerialView drawing
void CSerialView::OnDraw(CDC* pDC)
{
UNREFERENCED_PARAMETER(pDC);
CSerialDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CSerialView diagnostics
#ifdef _DEBUG
void CSerialView::AssertValid() const
{
CEditView::AssertValid();
}
void CSerialView::Dump(CDumpContext& dc) const
{
CEditView::Dump(dc);
}
CSerialDoc* CSerialView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSerialDoc)));
return (CSerialDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CSerialView message handlers
void CSerialView::OnInitialUpdate()
{
CEditView::OnInitialUpdate();
GetEditCtrl().SetReadOnly(TRUE);
//
// Create the font for this view
//
if (m_font.m_hObject == NULL)
{
if (m_font.CreatePointFont(95, _T("Fixedsys")))
SetFont(&m_font);
}
// Output some text
Output(_T("Serial - An Ultimate Toolbox Sample Application\r\n"));
Output(_T("Copyright 1998 by The Code Project - http://www.theUltimateToolbox.com\r\n"));
Output(_T("----------------------------------------------------------\r\n\r\n\r\n"));
}
HBRUSH CSerialView::CtlColor(CDC* pDC, UINT nCtlColor)
{
UNREFERENCED_PARAMETER(nCtlColor);
//
// Use custom colours to paint the control
//
pDC->SetTextColor(m_clrText);
pDC->SetBkColor(m_clrBkgnd);
return m_brBkgnd;
}
void CSerialView::Output(LPCTSTR pszOutput, ...)
{
//
// void Output(LPCTSTR pszOutput, ...)
//
// Outputs a formatted string to the edit window
//
// IN
// pszOutput: A format-control string.
//
// OUT
// none
//
// RETURN
// none
int nLength = GetEditCtrl().GetWindowTextLength();
TCHAR szBuffer[1024];
va_list argptr;
va_start(argptr, pszOutput);
_vstprintf(szBuffer, pszOutput, argptr);
va_end(argptr);
GetEditCtrl().SetSel(nLength, nLength);
GetEditCtrl().ReplaceSel(szBuffer);
}
void CSerialView::Backspace()
{
int nLength = GetEditCtrl().GetWindowTextLength();
GetEditCtrl().SetReadOnly(FALSE);
GetEditCtrl().SetSel(nLength - 1, nLength);
GetEditCtrl().Clear();
GetEditCtrl().SetReadOnly(TRUE);
}
LONG CSerialView::OnOutput(WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(wParam);
//
// This message is sent from the IncomingTextThread function
// on receipt of an incoming character notification. The
// character (string) is pointed to by lParam
Output((LPCTSTR) lParam);
return 0;
}
LONG CSerialView::OnBackspace(WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(wParam);
UNREFERENCED_PARAMETER(lParam);
//
// This message is sent from the IncomingTextThread function
// on receipt of an incoming character notification. The
// character is always the backspace character
Backspace();
return 0;
}