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