I have a MFC Edit control which i use to output multiple lines of text onto. I can color the text but it only colors everything, it won't color individual lines of text.
I know this is because i treat the text as one big buffer, but is there a way around this?
My Class:
CColorEdit::CColorEdit()
{
BackColor = GetSysColor( COLOR_3DFACE );
TextColor = RGB( 0, 0, 0 );
BackBrush.CreateSolidBrush( BackColor );
}
CColorEdit::~CColorEdit()
{
}
void CColorEdit::SetReadOnly ()
{
CEdit::SetReadOnly( true );
SetBGColor( RGB( 255, 255, 255 ) );
SetTextColor( RGB( 0, 0, 0 ) );
}
void CColorEdit::SetTextColor ( COLORREF Color )
{
TextColor = Color;
RedrawWindow();
}
void CColorEdit::SetBGColor ( COLORREF Color )
{
BackColor = Color;
BackBrush.DeleteObject();
BackBrush.CreateSolidBrush( BackColor );
RedrawWindow( );
}
HBRUSH CColorEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkColor( BackColor );
pDC->SetTextColor( TextColor );
nCtlColor = CTLCOLOR_EDIT;
return BackBrush;
}
BEGIN_MESSAGE_MAP(CColorEdit, CEdit)
ON_WM_CTLCOLOR_REFLECT()
END_MESSAGE_MAP()
I call like:
Tools.AppendWindowText( RGB( 0, 192, 0 ), "[%s] %s", CurrentService->Status, CurrentService->Name );
Here's the function:
void CTools::AppendWindowText( COLORREF Color, char* AppendText, ... )
{
static char AppendData[ 256 ];
static char CurrentData[ 2048000 ];
ZeroMemory( CurrentData, sizeof( CurrentData ) );
ZeroMemory( AppendData, sizeof( AppendData ) );
va_list valist;
va_start( valist, AppendText );
_vsnprintf( AppendData, sizeof( AppendData ) - strlen( AppendData ), AppendText, valist );
va_end( valist );
int CurrentTextLen = pClientDlg->m_ResultsWindow.GetWindowTextLengthA( );
int AppendDataLen = strlen( AppendData );
int DataLength = ( CurrentTextLen + AppendDataLen + 2 );
pClientDlg->m_ResultsWindow.GetWindowTextA( CurrentData, DataLength );
if ( CurrentTextLen > 0 ) { strcat( CurrentData, "\r\n" ); }
strcat( CurrentData, AppendData );
pClientDlg->m_ResultsWindow.SetTextColor( Color );
pClientDlg->m_ResultsWindow.SetWindowTextA( CurrentData );
}
Thanks