📄 serv1vw.cpp
字号:
// servevw.cpp : implementation of the CServerView class
//
#include "stdafx.h"
#include "server1.h"
#include "serv1doc.h"
#include "serv1vw.h"
#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CServerView
IMPLEMENT_DYNCREATE(CServerView, CScrollView)
BEGIN_MESSAGE_MAP(CServerView, CScrollView)
//{{AFX_MSG_MAP(CServerView)
ON_COMMAND(ID_SERVER_CLOSE, OnServerClose)
ON_COMMAND(ID_SERVER_OPEN, OnServerOpen)
ON_UPDATE_COMMAND_UI(ID_SERVER_CLOSE, OnUpdateServerClose)
ON_UPDATE_COMMAND_UI(ID_SERVER_OPEN, OnUpdateServerOpen)
ON_UPDATE_COMMAND_UI(ID_FILE_NEW, OnUpdateFileNew)
ON_UPDATE_COMMAND_UI(ID_FILE_OPEN, OnUpdateFileOpen)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE_AS, OnUpdateFileSaveAs)
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
// START CUSTOM CODE: Internet Programming
ON_MESSAGE(WM_SERVER_ACCEPT, OnServerAccept)
ON_MESSAGE(WM_CLIENT_CLOSE, OnClientClose)
ON_MESSAGE(WM_CLIENT_READ, OnClientRead)
// END MODIFICATIONS: Internet Programming
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CServerView construction/destruction
CServerView::CServerView()
{
// START CUSTOM CODE: Internet Programming
m_bServerIsOpen = FALSE;
m_hClientSocket = INVALID_SOCKET;
// END MODIFICATIONS: Internet Programming
}
CServerView::~CServerView()
{
// START CUSTOM CODE: Internet Programming
if (m_bServerIsOpen)
closesocket(m_pDoc->m_hServerSocket);
if (m_hClientSocket != INVALID_SOCKET)
closesocket(m_hClientSocket);
// END MODIFICATIONS: Internet Programming
}
void CServerView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
// START CUSTOM CODE: Internet Programming
m_pDoc = GetDocument();
m_pDoc->SetTitle("CLOSED for BUSINESS");
m_pParentWnd = GetParent();
m_pParentMenu = m_pParentWnd->GetMenu();
// Setup the server window
TEXTMETRIC tm;
CRect rectServerSize;
CClientDC dc(this);
dc.GetTextMetrics(&tm);
SetScrollSizes( MM_TEXT, CSize(0,0), CSize(0,(MAX_LINES*tm.tmHeight)), CSize(0, tm.tmHeight));
GetWindowRect( rectServerSize );
GetParentFrame()->MoveWindow( rectServerSize.left, rectServerSize.top, (MAX_COLUMNS*tm.tmAveCharWidth), (24*tm.tmHeight), FALSE);
return;
// END MODIFICATIONS: Internet Programming
}
/////////////////////////////////////////////////////////////////////////////
// CServerView drawing
void CServerView::OnDraw(CDC* pDC)
{
ASSERT_VALID(m_pDoc);
// TODO: add draw code for native data here
// START CUSTOM CODE: Internet Programming
TEXTMETRIC tm;
int iYValue;
pDC->GetTextMetrics(&tm);
iYValue = 0;
for (int iLine = 0; iLine <= m_pDoc->m_lLineNumber; iLine++)
{
pDC->TextOut(0,iYValue, m_pDoc->m_csText[iLine], m_pDoc->m_csText[iLine].GetLength());
iYValue += tm.tmHeight;
}
SetScrollSizes(MM_TEXT, CSize(0, ((int) m_pDoc->m_lLineNumber+1) * tm.tmHeight));
// END MODIFICATIONS: Internet Programming
return;
}
// START CUSTOM CODE: Internet Programming
void CServerView::PrintString(CString csString)
{
if (csString.GetLength() == 0)
return;
// Print each character in the string except the last one
for (int iChar = 0; iChar < (csString.GetLength()-1); iChar++)
PrintChar(csString[iChar], FALSE); // Don't update scroll bar
// Update the scroll bar when reaching the last character
PrintChar(csString[iChar], TRUE);
m_pDoc->UpdateAllViews(NULL, 0L, 0);
return;
}
// END MODIFICATIONS: Internet Programming
// START CUSTOM CODE: Internet Programming
void CServerView::PrintString(LPSTR lpszString)
{
if (*lpszString == NULL)
return;
// Print each character in the string except the last one
for (int iChar = 0; lpszString[iChar+1] != NULL; iChar++)
PrintChar(lpszString[iChar], FALSE); // Don't update scroll bar
// Update the scroll bar when reaching the last character
PrintChar( lpszString[iChar], TRUE);
m_pDoc->UpdateAllViews(NULL, 0L, 0);
return;
}
// END MODIFICATIONS: Internet Programming
// START CUSTOM CODE: Internet Programming
void CServerView::PrintChar(char chChar, BOOL bLastChar)
{
// Ignore carriage-returns, the following statements detect new-lines.
if (chChar =='\r')
return;
CClientDC dc(this);
TEXTMETRIC tm;
CPoint pt, ptOrigin;
CRect rectServerSize;
OnPrepareDC(&dc);
dc.GetTextMetrics(&tm);
if (chChar =='\n')
{
// Move to column zero for a new line.
m_pDoc->m_lColumnNumber = 0;
if (m_pDoc->m_lLineNumber == (MAX_LINES-1))
{
for (int iLine = 0; iLine < MAX_LINES; iLine++)
m_pDoc->m_csText[iLine] = m_pDoc->m_csText[iLine+1];
m_pDoc->m_csText[iLine].Empty;
m_pDoc->UpdateAllViews(this, 0L, 0);
}
else
m_pDoc->m_lLineNumber++;
SetScrollSizes( MM_TEXT, CSize(0, ((int) m_pDoc->m_lLineNumber+1) * tm.tmHeight));
}
else
{
if (m_pDoc->m_lColumnNumber++ >= MAX_COLUMNS)
{
m_pDoc->m_lColumnNumber = 1;
if (m_pDoc->m_lLineNumber == (MAX_LINES-1))
{
for (int iLine = 0; iLine < MAX_LINES; iLine ++)
m_pDoc->m_csText[iLine] = m_pDoc->m_csText[iLine+1];
m_pDoc->m_csText[iLine].Empty;
m_pDoc->UpdateAllViews(this, 0L, 0);
}
else
m_pDoc->m_lLineNumber++;
}
m_pDoc->m_csText[m_pDoc->m_lLineNumber] += chChar;
if (bLastChar)
dc.TextOut(0, (int) m_pDoc->m_lLineNumber * tm.tmHeight,
m_pDoc->m_csText[m_pDoc->m_lLineNumber],
m_pDoc->m_csText[m_pDoc->m_lLineNumber].GetLength());
}
// If last character then update the position on the scroll bar
if (bLastChar)
{
pt = GetScrollPosition();
if ((int) m_pDoc->m_lLineNumber * tm.tmHeight < pt.y)
{
pt.y = (int) m_pDoc->m_lLineNumber * tm.tmHeight;
ScrollToPosition(pt);
}
else
{
CScrollView::GetClientRect( rectServerSize);
if ((((int)m_pDoc->m_lLineNumber * tm.tmHeight) + tm.tmHeight) > rectServerSize.bottom)
{
ptOrigin = dc.GetViewportOrg();
pt.x = ptOrigin.x;
pt.y = ((int) m_pDoc->m_lLineNumber * tm.tmHeight) + tm.tmHeight - rectServerSize.bottom;
ScrollToPosition(pt );
}
}
}
return;
}
// END MODIFICATIONS: Internet Programming
/////////////////////////////////////////////////////////////////////////////
// CServerView printing
BOOL CServerView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CServerView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CServerView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CServerView diagnostics
#ifdef _DEBUG
void CServerView::AssertValid() const
{
CScrollView::AssertValid();
}
void CServerView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CServerDoc* CServerView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CServerDoc)));
return (CServerDoc*)m_pDocument;
}
#endif //_DEBUG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -