Game client codebase including: - CharacterActionControl: Character and creature management - GlobalScript: Network, items, skills, quests, utilities - RYLClient: Main client application with GUI and event handlers - Engine: 3D rendering engine (RYLGL) - MemoryManager: Custom memory allocation - Library: Third-party dependencies (DirectX, boost, etc.) - Tools: Development utilities 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
119 lines
2.3 KiB
C++
119 lines
2.3 KiB
C++
// LogCtrl.cpp: implementation of the CLogCtrl class.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#include "LogCtrl.h"
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CLogCtrl::CLogCtrl()
|
|
{
|
|
m_hwndEdit = NULL;
|
|
|
|
m_ptPosition.x = 0;
|
|
m_ptPosition.y = 0;
|
|
|
|
m_ptSize.x = 0;
|
|
m_ptSize.y = 0;
|
|
}
|
|
|
|
|
|
CLogCtrl::~CLogCtrl()
|
|
{
|
|
if( m_hwndEdit )
|
|
{
|
|
DestroyWindow( m_hwndEdit );
|
|
}
|
|
}
|
|
|
|
|
|
void CLogCtrl::Init( long x, long y, long width, long height, HWND hwndParent )
|
|
{
|
|
//CreateFont( )
|
|
|
|
if( NULL == m_hwndEdit )
|
|
{
|
|
m_hwndEdit = CreateWindow( "EDIT", "", WS_VISIBLE | WS_CHILD | WS_BORDER | ES_READONLY | ES_MULTILINE | WS_VSCROLL | ES_AUTOVSCROLL,
|
|
x, y, width, height, hwndParent, NULL, NULL, 0 );
|
|
|
|
m_ptPosition.x = x;
|
|
m_ptPosition.y = y;
|
|
|
|
m_ptSize.x = width;
|
|
m_ptSize.y = height;
|
|
}
|
|
else
|
|
{
|
|
SetParent( m_hwndEdit, hwndParent );
|
|
|
|
SetPosition( x, y );
|
|
SetSize( width, height );
|
|
}
|
|
}
|
|
|
|
void CLogCtrl::SetPosition( long x, long y )
|
|
{
|
|
m_ptPosition.x = x;
|
|
m_ptPosition.y = y;
|
|
|
|
if( m_hwndEdit )
|
|
{
|
|
SetWindowPos( m_hwndEdit, NULL, x, y, 0, 0, SWP_NOSIZE | SWP_NOZORDER );
|
|
}
|
|
}
|
|
|
|
void CLogCtrl::SetSize( long width, long height )
|
|
{
|
|
m_ptSize.x = width;
|
|
m_ptSize.y = height;
|
|
|
|
if( m_hwndEdit )
|
|
{
|
|
SetWindowPos( m_hwndEdit, NULL, 0, 0, width, height, SWP_NOMOVE | SWP_NOZORDER );
|
|
}
|
|
}
|
|
|
|
void CLogCtrl::OutputMessage( const char* szMsg )
|
|
{
|
|
if( NULL == m_hwndEdit )
|
|
{
|
|
return;
|
|
}
|
|
|
|
long lSelBegin, lSelEnd;
|
|
long lTextLen;
|
|
|
|
static char szTmp[300];
|
|
|
|
int nCnt = 0, nDestCnt = 0;
|
|
while( '\0' != szMsg[nCnt] && nDestCnt < 299 )
|
|
{
|
|
if( '\n' == szMsg[nCnt] )
|
|
{
|
|
szTmp[nDestCnt++] = '\r';
|
|
|
|
if( nDestCnt == 299 )
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
szTmp[nDestCnt++] = szMsg[nCnt++];
|
|
}
|
|
szTmp[nDestCnt] = '\0';
|
|
|
|
|
|
// get current selection
|
|
SendMessage( m_hwndEdit, EM_GETSEL, (WPARAM)&lSelBegin, (LPARAM)&lSelEnd );
|
|
|
|
// set selection at the end of the text
|
|
lTextLen = SendMessage( m_hwndEdit, WM_GETTEXTLENGTH, 0, 0 );
|
|
SendMessage( m_hwndEdit, EM_SETSEL, lTextLen, lTextLen );
|
|
// add text(replace selection) at the end of the tex
|
|
SendMessage( m_hwndEdit, EM_REPLACESEL, FALSE, (LPARAM)szTmp );
|
|
|
|
// restore the selection
|
|
SendMessage( m_hwndEdit, EM_SETSEL, lSelBegin, lSelEnd );
|
|
} |