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

📄 drawdoc.cpp

📁 实验七 在网络中传输图像:采用C++
💻 CPP
字号:
// DrawDoc.cpp : implementation of the CDrawDoc class
//

#include "stdafx.h"
#include "Draw.h"

#include "DrawDoc.h"
#include "MySocket.h"
#include "Line.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDrawDoc

IMPLEMENT_DYNCREATE(CDrawDoc, CDocument)

BEGIN_MESSAGE_MAP(CDrawDoc, CDocument)
	//{{AFX_MSG_MAP(CDrawDoc)
	ON_COMMAND(ID_BCLOSE, OnBclose)
	ON_COMMAND(ID_CONN, OnConn)
	ON_COMMAND(ID_LISTEN, OnListen)
	ON_COMMAND(ID_COLOR_BLACK, OnColorBlack)
	ON_UPDATE_COMMAND_UI(ID_COLOR_BLACK, OnUpdateColorBlack)
	ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)
	ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, OnUpdateColorBlue)
	ON_COMMAND(ID_COLOR_GREEN, OnColorGreen)
	ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, OnUpdateColorGreen)
	ON_COMMAND(ID_COLOR_RED, OnColorRed)
	ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

const COLORREF CDrawDoc::m_crColors[4]={
	RGB(0,0,0),
	RGB(255,0,0),
	RGB(0,255,0),
	RGB(0,0,255)
};

/////////////////////////////////////////////////////////////////////////////
// CDrawDoc construction/destruction

CDrawDoc::CDrawDoc()
{
	// TODO: add one-time construction code here

}

CDrawDoc::~CDrawDoc()
{
}

BOOL CDrawDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	m_nColor=ID_COLOR_BLACK-ID_COLOR_BLACK;

	m_strName="127.0.0.1";
	m_iPort=500;
	m_sConnectSocket.SetParent(this);
	m_sListenSocket.SetParent(this);
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CDrawDoc serialization

void CDrawDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CDrawDoc diagnostics

#ifdef _DEBUG
void CDrawDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CDrawDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDrawDoc commands

void CDrawDoc::OnAccept()
{
 	m_sListenSocket.Accept(m_sConnectSocket);
}

void CDrawDoc::OnClose()
{
	m_sConnectSocket.Close();
	AfxMessageBox("连接己被关闭!");
}

void CDrawDoc::OnReceive()
{
	char *pBuf=new char[1025];
	int iBufSize=1024;
	int iRcvd;
	CLine* pLine=new CLine;

	iRcvd=m_sConnectSocket.Receive(pBuf,iBufSize);
	if(iRcvd==SOCKET_ERROR)
	{
		AfxMessageBox("接收失败");
	}
	else
	{
		pBuf[iRcvd]=NULL;
		memcpy((char*)pLine,pBuf,sizeof(CLine));
		m_oaLines.Add(pLine);
		POSITION pos=this->GetFirstViewPosition();
		CView* pView=this->GetNextView(pos);
		CDC *hDC=pView->GetDC();
		pLine->Draw(hDC);
	}
}

void CDrawDoc::OnSend()
{

    MessageBox(NULL,"连接成功!","消息",MB_OK);

}

void CDrawDoc::OnConn()
{
	m_sConnectSocket.Create();
	m_sConnectSocket.Connect(m_strName,m_iPort);
}

void CDrawDoc::OnListen()
{
	m_sListenSocket.Create(m_iPort);
	m_sListenSocket.Listen();
}
void CDrawDoc::OnBclose() 
{
	// TODO: Add your command handler code here
	OnClose();
}

CLine* CDrawDoc::AddLine(CPoint ptFrom, CPoint ptTo)
{
	CLine* pLine=new CLine(ptFrom,ptTo,m_crColors[m_nColor]);	
	try
	{
		m_oaLines.Add(pLine);
	}
	catch(CMemoryException* perr)
	{
		AfxMessageBox("Out of memory",MB_ICONSTOP|MB_OK);
		if(pLine)
		{
			delete pLine;
			pLine=NULL;
		}
		perr->Delete();
	}
	return pLine;
}

int CDrawDoc::GetLineCount()
{
	return m_oaLines.GetSize();
}

CLine* CDrawDoc::GetLine(int nIndex)
{
	return (CLine*) m_oaLines[nIndex];
}

UINT CDrawDoc::GetColor()
{
	return ID_COLOR_BLACK+m_nColor;
}

void CDrawDoc::OnColorBlack() 
{
	// TODO: Add your command handler code here
	m_nColor=ID_COLOR_BLACK-ID_COLOR_BLACK;
}

void CDrawDoc::OnUpdateColorBlack(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor()==ID_COLOR_BLACK?1:0);
}

void CDrawDoc::OnColorBlue() 
{
	// TODO: Add your command handler code here
	m_nColor=ID_COLOR_BLUE-ID_COLOR_BLACK;
	
}

void CDrawDoc::OnUpdateColorBlue(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor()==ID_COLOR_BLUE?1:0);
	
}

void CDrawDoc::OnColorGreen() 
{
	// TODO: Add your command handler code here
	m_nColor=ID_COLOR_GREEN-ID_COLOR_BLACK;
	
}

void CDrawDoc::OnUpdateColorGreen(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor()==ID_COLOR_GREEN?1:0);
	
}

void CDrawDoc::OnColorRed() 
{
	// TODO: Add your command handler code here
	m_nColor=ID_COLOR_RED-ID_COLOR_BLACK;
	
}

void CDrawDoc::OnUpdateColorRed(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(GetColor()==ID_COLOR_RED?1:0);
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -