You can pass your variable to the EM_STREAMOUT so that it can be updated as needed, for example:
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);
Update: To load RTF data into a RichEdit control, use EM_STREAMIN , for example:
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);
source share