⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serv1vw.cpp

📁 See Appendix B for a description of the programs included on this companion disk. RESOURCE.WRI iden
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -