mychatcltdoc.cpp
来自「关于使用VC编程的代码」· C++ 代码 · 共 181 行
CPP
181 行
// MyChatCltDoc.cpp : implementation of the CMyChatCltDoc class
//
#include "stdafx.h"
#include "MyChatClt.h"
#include "MyChatCltDoc.h"
#include "MainFrm.h"
#include "InputView.h"
#include "OutputView.h"
#include "SvrDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyChatCltDoc
IMPLEMENT_DYNCREATE(CMyChatCltDoc, CDocument)
BEGIN_MESSAGE_MAP(CMyChatCltDoc, CDocument)
//{{AFX_MSG_MAP(CMyChatCltDoc)
ON_UPDATE_COMMAND_UI(ID_FILE_SAVE, OnUpdateFileSave)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyChatCltDoc construction/destruction
CMyChatCltDoc::CMyChatCltDoc()
{
m_pSocket = NULL;
m_bServerActive = FALSE;
m_bContentModified = FALSE;
m_strServerClosed.LoadString(IDS_SERVER_CLOSED);
}
CMyChatCltDoc::~CMyChatCltDoc()
{
if(m_pSocket != NULL)
{
m_pSocket->Close();
delete m_pSocket;
m_pSocket = NULL;
}
}
BOOL CMyChatCltDoc::OnNewDocument()
{
CSvrDlg dlg;
BOOL bConnected;
if(dlg.DoModal() == IDOK)
{
m_pSocket = new CMyChatSocket(this);
m_pSocket->Create();
bConnected = m_pSocket->Connect(dlg.m_strServer,dlg.m_nPort+700);
if(bConnected == FALSE)
{
delete m_pSocket;
::PostQuitMessage(0);
}
m_bServerActive = TRUE;
m_pSocket->Init();
m_pSocket->m_strClientID = dlg.m_strID;
CString strEnter;
strEnter.LoadString(IDS_CLIENT_ENTER);
m_pSocket->SendData(strEnter);
POSITION pos = GetFirstViewPosition();
BOOL bFind = FALSE;
CView* pView;
CInputView* pInView;
while((pos != NULL) && (bFind == FALSE))
{
pView = GetNextView(pos);
if( pView->IsKindOf(RUNTIME_CLASS(CInputView)) )
{
bFind = TRUE;
}
}
pInView = (CInputView*)pView;
pInView->m_strClientID = dlg.m_strID;
}
else
{
AfxMessageBox("error in connecting to server!");
}
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CMyChatCltDoc serialization
void CMyChatCltDoc::Serialize(CArchive& ar)
{
CMainFrame* pFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
COutputView* pView = (COutputView*)pFrm->m_wndSplitter.GetPane(0,0);
CString strMsg;
if (ar.IsStoring())
{
pView->GetWindowText(strMsg);
ar << strMsg;
m_bContentModified = TRUE;
}
else
{
ar >> strMsg;
pView->MsgOut(strMsg);
}
}
/////////////////////////////////////////////////////////////////////////////
// CMyChatCltDoc diagnostics
#ifdef _DEBUG
void CMyChatCltDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CMyChatCltDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyChatCltDoc commands
void CMyChatCltDoc::OnReadPendingData()
{
CMainFrame* pFrm = (CMainFrame*)AfxGetApp()->m_pMainWnd;
COutputView* pView = (COutputView*)pFrm->m_wndSplitter.GetPane(0,0);
CString strRecv = m_pSocket->ReceiveData();
pView->MsgOut(strRecv);
if(strRecv == m_strServerClosed)
{
m_pSocket->Finish_Comm();
m_pSocket->Close();
m_bServerActive = TRUE;
}
}
void CMyChatCltDoc::OnSendPendingData(CString strMsg)
{
m_pSocket->SendData( strMsg);
}
void CMyChatCltDoc::OnCloseDocument()
{
CString strExit;
if(m_bServerActive == TRUE)
{
strExit.LoadString(IDS_CLIENT_CLOSED);
m_pSocket->SendData(strExit);
}
CDocument::OnCloseDocument();
}
void CMyChatCltDoc::OnUpdateFileSave(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bContentModified = TRUE);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?