📄 drawdoc.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 + -