TextBuffer.cpp 733 Bytes
#include "TextBuffer.h"

DWORD WINAPI FlushThread(LPVOID lParam); // window.cpp

TextBuffer::TextBuffer(HWND edit) : hThread(IthCreateThread(FlushThread, (DWORD)this)),
	hEdit(edit),
	running(true)
{
}

TextBuffer::~TextBuffer()
{
	running = false;
	WaitForSingleObject(hThread.get(), 0);
}

void TextBuffer::AddText(LPCWSTR str, int len, bool line)
{
	CSLock lock(cs);
	if (len > 0)
		this->str.append(str, len);
	line_break = line;
}

void TextBuffer::Flush()
{
	CSLock lock(cs);
	if (line_break || str.empty())
		return;
	DWORD t = Edit_GetTextLength(hEdit);
	Edit_SetSel(hEdit, t, -1);
	Edit_ReplaceSel(hEdit, str.c_str());
	str.clear();
}

void TextBuffer::ClearBuffer()
{
	CSLock lock(cs);
	str.clear();
	line_break = false;
}