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