RichText:
{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fnil\fcharset0 Times New Roman;}}
\viewkind4\uc1\pard\f0\fs24 I have an apple \u20320?\u22909?\par
}
Ожидается после преобразования:
У меня есть яблоко 100
Фактически после конвертации:
у меня есть яблоко ??
Вот мое изменение кода:
RichText::In(const wchar_t* text)
{
CreateTextServices(NULL, &TextHost, &TextServices);
if (TextServices)
{
WPARAM format = SF_RTF | SF_UNICODE;
long result = 0;
StreamIn stream(text);
textServicesInterface->TxSendMessage(EM_STREAMIN, format, (LPARAM)&stream, &result);
}
}
String RichText::Out()
{
WPARAM format = SF_TEXT;
String result;
ITextServicesPtr textServicesInterface = TextServices;
if (textServicesInterface)
{
long read = 0;
StreamOut stream;
textServicesInterface->TxSendMessage(EM_STREAMOUT, format, (LPARAM)&stream, &read);
result = stream.Text;
}
return result;
}
class Stream:
public EDITSTREAM
{
public:
Stream():
Index(0)
{
ZeroMemory(static_cast<EDITSTREAM*>(this), sizeof(EDITSTREAM));
dwCookie = (DWORD_PTR)this;
}
CAtlStringA Text;
size_t Index;
};
class StreamOut:
public Stream
{
public:
StreamOut()
{
pfnCallback = CallBack;
}
private:
static DWORD CALLBACK CallBack(DWORD_PTR cookie, unsigned char* buffer, long maximumBytes, long *bytesCopied)
{
if (NULL != bytesCopied)
{
*bytesCopied = 0;
Stream* stream = (Stream*)cookie;
if (NULL != stream)
{
buffer[maximumBytes] = '\0';
stream->Text.Insert(stream->Text.GetLength(), (const char*)buffer);
*bytesCopied = maximumBytes;
return 0;
}
}
return 1;
}
};
Может кто-нибудь объяснить мне, в чем проблема с моим кодом?