Привет !
> Да Vic согласен что-то я сделал неправильно.Дело в том что вроде-бы
> нормально считался RTF в ХР а на работе у меня 98 и вот там оказалось что
> пример не работает.
> Поэтому вопрос как воспользоваться функцией StreamIn() в классе
> CRichEditCtrl? Предположимбчто имя файла RTF нам известно.
Вот так можно загрузить файл :
Извиняйте, что пока ответ такой короткий - тороплюсь на работу
попозже - более в развернутом виде :-)
class _vRichEditCookie
{
public:
BOOL m_bSave;
CFile *m_pFile;
DWORD m_dwError;
_vRichEditCookie(CFile *pFile, BOOL bSave = FALSE)
{
m_dwError = 0;
m_pFile = pFile;
m_bSave = bSave;
}
};
// return 0 for no error, otherwise return error code
DWORD CALLBACK VEditStreamCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb,
LONG *pcb)
{
_vRichEditCookie* pCookie = (_vRichEditCookie*) dwCookie;
*pcb = cb;
DWORD dw = 0;
CFile *pFile = pCookie->m_pFile;
try
{
if (pCookie->m_bSave)
pFile->WriteHuge(pbBuff, cb);
else
*pcb = pFile->ReadHuge(pbBuff, cb);
}
catch(CFileException *e)
{
*pcb = 0;
pCookie->m_dwError = (DWORD) e->m_cause;
dw = 1;
e->Delete();
}
catch(CException *e)
{
*pcb = 0;
pCookie->m_dwError = (DWORD) CFileException::generic;
dw = 1;
e->Delete();
}
return dw;
}
void CRichDlgDlg::OnButtonLoad()
{
CFileDialog dlg(TRUE, "rtf", NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
"Файлы RTF (*.rtf)|*.rtf|Текстовые файлы (*.txt)|*.txt||");
if(dlg.DoModal() == IDOK)
{
CFile file;
if(file.Open(dlg.GetPathName(), CFile::modeRead))
{
EDITSTREAM es = { 0, 0, VEditStreamCallBack };
_vRichEditCookie cookie(&file);
es.dwCookie = (DWORD) &cookie;
int nFormat = (dlg.GetFileExt() == "rtf") ? SF_RTF : SF_TEXT;
m_wndEdit.StreamIn(nFormat, es);
file.Close();
m_wndEdit.Invalidate();
if(cookie.m_dwError != 0)
AfxThrowFileException(cookie.m_dwError);
}
else
MessageBox("Не удается открыть файл !");
}
}
Vic.
-*Информационный канал Subscribe.Ru
Написать в лист: mailto:comp.soft.prog.prog-list@subscribe.ru
Отписаться: http://subscribe.ru/member/unsub?grp=comp.soft.prog.prog&email=
http://subscribe.ru/ mailto:ask@subscribe.ru