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

qua*_*dia 4 winapi rtf richedit

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

Rem*_*eau 6

您可以将变量传递给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;
}
Run Code Online (Sandbox Code Playgroud)

.

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...
Run Code Online (Sandbox Code Playgroud)

更新:要将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;
}
Run Code Online (Sandbox Code Playgroud)

.

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

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