【问题标题】:C++ WIN32 - Load RTF Data to Rich Edit ControlC++ WIN32 - 将 RTF 数据加载到 Rich Edit 控件
【发布时间】:2019-04-15 16:21:39
【问题描述】:

我尝试将文本(格式为 RTF)加载到我的富文本控件中,但它不起作用。我什至尝试过使用

WriteFile((HANDLE)dwCookie, myBuff, cb, (DWORD*)pcb, NULL); 

而不是

*pcb = rtf->readsome((char*)pbBuff, cb);

void CreateRichEdit(HWND hwndOwner, int x, int y, int width, int height, HINSTANCE hinst)
{
    LoadLibrary(TEXT("Msftedit.dll"));

    edittext = CreateWindowEx(0, TEXT("RICHEDIT50W"), TEXT("Type here"), ES_MULTILINE | WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | ES_AUTOVSCROLL | WS_VSCROLL,
        x, y, width, height,
        hwndOwner, NULL, hinst, 0);

    std::string teext = "{\rtf1\ansi{\fonttbl{ \f0\fnil\fcharset0\fprq0\fttruetype Helvetica; }{\f1\fnil\fcharset0\fprq0\fttruetype Bitstream Charter; }}{\f1\fs24 Ceci est un texte accentu\'e9}\par{ \f0\fs24 avec des caract\'e8res {\b gras},}\par{ \f1 des{ \fs18 petits } et des{ \fs32 gros }. }}";

    std::stringstream rtf("{\rtf1\ansi{\fonttbl{ \f0\fnil\fcharset0\fprq0\fttruetype Helvetica; }{\f1\fnil\fcharset0\fprq0\fttruetype Bitstream Charter; }}{\f1\fs24 Ceci est un texte accentu\'e9}\par{ \f0\fs24 avec des caract\'e8res {\b gras},}\par{ \f1 des{ \fs18 petits } et des{ \fs32 gros }. }}");
    //std::stringstream rtf("...");

    EDITSTREAM es = { 0 };
    es.dwError = 0;
    es.dwCookie = (DWORD_PTR)&rtf;
    es.pfnCallback = EditStreamInCallback;

    SendMessage(edittext, EM_STREAMIN, SF_RTF, (LPARAM)&es);
}


DWORD CALLBACK EditStreamInCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb)
{

    std::stringstream * rtf = (std::stringstream*) dwCookie;
    std::string text = (*rtf).str();
    char myBuff[500];
    *pcb = rtf->readsome((char*)pbBuff, cb);

    return *pcb;
}

我也尝试取消注释 std::stringstream rtf("..."); 只是为了在我的编辑控件中写入 ...,但它不起作用。

【问题讨论】:

标签: c++ win32gui richedit


【解决方案1】:

通过返回从流中读取的字节数(在本例中为非零字节数),您是在告诉控件编辑流回调不成功。尝试return *pcb > 0 ? 0 : 1;EditStreamInCallback 返回。您还可以考虑使用rtf->fail() 来确定此回调是否成功。此外,针对NULLnullptr 测试rtf 将是一个好主意(以及成功或失败的指示)。

https://docs.microsoft.com/en-us/windows/desktop/api/Richedit/nc-richedit-editstreamcallback

回调函数返回零表示成功。

回调函数返回一个非零值来指示错误。如果发生错误,则读取或写入操作结束,富编辑控件丢弃 pbBuff 缓冲区中的所有数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2011-06-29
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多