42 lines
731 B
C++
42 lines
731 B
C++
#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;
|
|
}
|