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

📄 chatedit.cpp

📁 网络聊天工具原代码 VC源码(网络编程
💻 CPP
字号:
// ChatEdit.cpp : implementation file
//

#include "stdafx.h"
#include "Chat.h"
#include "ChatEdit.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChatEdit

CChatEdit::CChatEdit()
{
	m_szMe = _T("UNKNOWN");
	m_szYou = _T("UNKNOWN");
	m_bSetUser = FALSE;
	m_lpBuffer  = NULL;
	nCurLines = 0;
	m_dwBytes = 0;
}

CChatEdit::~CChatEdit()
{
	if( m_lpBuffer != NULL ) GlobalFree( m_lpBuffer );
	m_lpBuffer = NULL;
}


BEGIN_MESSAGE_MAP(CChatEdit, CEdit)
	//{{AFX_MSG_MAP(CChatEdit)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	ON_MESSAGE(WM_CLEAR, OnClear )
	ON_MESSAGE(WM_PASTE, OnPaste )
	ON_MESSAGE(WM_CUT, OnCut )
	ON_MESSAGE(WM_UNDO, OnUndo )
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChatEdit message handlers

void CChatEdit::SetUser( CString szMe, CString szYou )
{
	m_szMe = szMe;
	m_szYou = szYou;
	
	if( m_lpBuffer == NULL )
	{
		m_lpBuffer = (LPBYTE)GlobalAlloc( GPTR, 64000 );
	}
	if( m_lpBuffer != NULL )
	{
		m_bSetUser = TRUE;
	}
}


void CChatEdit::PostChat( LPSTR lpBuffer, BOOL bSide )
{
	int nResult;
	int nFrom;
	int nBytes;

	nBytes = strlen( lpBuffer );
	if( nBytes == 0 ) return;
	if( m_bSetUser == FALSE ) return;
	if( m_lpBuffer ==  NULL ) return;
	//首先存储当前内容,然后再增加
	nResult = GetWindowText( (LPTSTR)m_lpBuffer, 64000 );
	if( nResult+nBytes+120 > 64000 ) 
	{
		nResult = 0;
		m_lpBuffer[nResult] = '\0';
		m_dwBytes = 0;
	}
	if( nResult == 0 )
	{
		nFrom = 0;
		nCurLines = 0;
		m_dwBytes = 0;
	}
	else 
	{
		m_lpBuffer[nResult] = '\r';
		m_lpBuffer[nResult+1] = '\n';
		m_lpBuffer[nResult+2] = '\0';
		nFrom = nResult+2;
	}
	if( bSide )  //是我自己说的,加进去
	{
		//以 aa: how are you?的形式
		memcpy( m_lpBuffer+nFrom, (LPCTSTR)m_szMe, m_szMe.GetLength() );
		m_lpBuffer[ nFrom+m_szMe.GetLength() ] =':';
		m_lpBuffer[ nFrom+m_szMe.GetLength()+1 ] =' ';
		m_lpBuffer[ nFrom+m_szMe.GetLength()+2 ] ='\0';
		nFrom+=m_szMe.GetLength()+2;
	}
	else
	{
		memcpy( m_lpBuffer+nFrom, (LPCTSTR)m_szYou, m_szYou.GetLength() );
		m_lpBuffer[ nFrom+m_szYou.GetLength() ] =':';
		m_lpBuffer[ nFrom+m_szYou.GetLength()+1 ] =' ';
		m_lpBuffer[ nFrom+m_szYou.GetLength()+2 ] ='\0';
		nFrom+=m_szYou.GetLength()+2;
	}
	memcpy( m_lpBuffer+nFrom, lpBuffer, nBytes );
	m_lpBuffer[nFrom+nBytes] = '\0';
	m_dwBytes = nFrom+nBytes;
	nCurLines++;	
	SetWindowText( (LPCTSTR)m_lpBuffer );
	LineScroll( nCurLines );
}


void CChatEdit::OnPaste(WPARAM wParam, LPARAM lParam)
{
}

void CChatEdit::OnCut(WPARAM wParam, LPARAM lParam)
{
}

void CChatEdit::OnUndo(WPARAM wParam, LPARAM lParam)
{
}

void CChatEdit::OnClear(WPARAM wParam, LPARAM lParam)
{
}

BOOL CChatEdit::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	switch( pMsg->message )
	{
	case WM_KEYUP:
	case WM_KEYDOWN:
		switch( pMsg->wParam )
		{
		case VK_LEFT:
		case VK_RIGHT:
		case VK_UP:
		case VK_DOWN:
		case VK_HOME:
		case VK_END:
		case VK_SHIFT:
			return CEdit::PreTranslateMessage( pMsg );
		default: return TRUE;
		}
		break;
	default: break;
	}
	return CEdit::PreTranslateMessage(pMsg);
}

void CChatEdit::SetMyName(CString szMe)
{
	if( szMe.GetLength() == 0 ) return;
	m_szMe = szMe;
}

LPBYTE CChatEdit::GetBuffer()
{
	return m_lpBuffer;
}

int CChatEdit::GetBytes()
{
	return m_dwBytes;
}

⌨️ 快捷键说明

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