Re: CRichEditCtrl contents from RTF file
Hi Joe,
I've taken some snippets from what you'd posted and I still have the same
problem as earlier. Only a truncated portion of the file appears in the
CRichEditCtrl. Here's my latest code:
class StreamInCookie
{
public:
CFile *file;
DWORD_PTR remaining;
DWORD err;
};
static DWORD CALLBACK EULAStreamInCallback(DWORD_PTR dwCookie, LPBYTE
pbBuff, LONG cb, LONG *pcb)
{
StreamInCookie * streamIn = (StreamInCookie *)dwCookie;
if(streamIn->remaining == 0)
{
*pcb = 0;
streamIn->err = ERROR_SUCCESS;
return 1; // nonzero value terminates read
}
DWORD bytesToRead = min(streamIn->remaining, (DWORD)cb);
UINT bytesRead;
try
{
bytesRead = streamIn->file->Read(pbBuff, bytesToRead);
}
catch(CFileException * e)
{
streamIn->err = e->m_lOsError;
e->Delete();
streamIn->remaining = 0;
return 1;
}
if(bytesRead == 0)
{
streamIn->err = ::GetLastError();
*pcb = 0;
return 1; // return nonzero to stop operation
}
streamIn->remaining -= bytesRead;
*pcb = bytesRead;
streamIn->err = ERROR_SUCCESS;
return 0;
}
BOOL CREPage::OnInitDialog()
{
CBasePage::OnInitDialog();
if (m_strRTFFilePath.GetLength())
{
m_RECtrl.ShowScrollBar(SB_VERT, TRUE);
try
{
StreamInCookie streamIn;
CFile eulaFile(m_strRTFFilePath, CFile::modeRead|CFile::shareExclusive);
streamIn.file = &eulaFile;
EDITSTREAM es;
es.dwCookie = (DWORD_PTR)&streamIn;
es.pfnCallback = (EDITSTREAMCALLBACK)EULAStreamInCallback;
m_RECtrl.StreamIn(SF_RTF, es);
}
catch (CFileException *pEx)
{
//not shown for brevity
}
}
return TRUE;
}
Thanks,
JY