winapi - 如何从 Rich Edit Win API 获取 RTF 格式的文本?

标签 winapi rtf richedit

(对不起,我疯狂的英语)
我想以 RTF 格式获取 Rich Edit 中的所有文本,而不是将纯文本转换为变量。我尝试使用 EM_STREAMOUT 的 SendMessage() 直接将 Rich Edit 写入文件,但我无法将内容保存到特定变量,例如 LPWSTR。请记住,只有 Win API,没有 MFC。谢谢你的帮助!

最佳答案

您可以将变量传递给 EM_STREAMOUT回调以便它可以根据需要更新,例如:

DWORD CALLBACK EditStreamOutCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
    std::stringstream *rtf = (std::stringstream*) dwCookie;
    rtf->write((char*)pbBuff, cb);
    *pcb = cb;
    return 0;
}

.
std::stringstream rtf;

EDITSTREAM es = {0};
es.dwCookie = (DWORD_PTR) &rtf;
es.pfnCallback = &EditStreamOutCallback; 
SendMessage(hRichEditWnd, EM_STREAMOUT, SF_RTF, (LPARAM)&es);

// use rtf.str() as needed...

更新:要将 RTF 数据加载到 RichEdit 控件中,请使用 EM_STREAMIN ,例如:
DWORD CALLBACK EditStreamInCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
    std::stringstream *rtf = (std::stringstream*) dwCookie;
    *pcb = rtf->readsome((char*)pbBuff, cb);
    return 0;
}

.
std::stringstream rtf("...");

EDITSTREAM es = {0};
es.dwCookie = (DWORD_PTR) &rtf;
es.pfnCallback = &EditStreamInCallback; 
SendMessage(hRichEditWnd, EM_STREAMIN, SF_RTF, (LPARAM)&es);

关于winapi - 如何从 Rich Edit Win API 获取 RTF 格式的文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15655953/

相关文章:

c++ - 如何将 _RICHEDIT_VER (riched20.dll) 升级到版本 3 或更高版本

c++ - C++98如何处理多个不同类型的参数?

c++ - GetDiBits:BITMAPINFOHEADER 中传递的不同维度

php - 在 Windows 上设置 react/zmq

javascript - 如何使用 CKEditor 从 HTML 获取 RTF?

delphi - 如何从 TRichedit 中按点或按索引获取字符

windows - 使用 GetAdaptersInfo() 时,所有适配器仅 Malloc 一次?

java - RTF 到 Java 中的纯文本

delphi - 如何正确显示日文RTF字体