Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2003-11-19

Re: Новости дискуссионного листа "Программирование. Форум !!!"

Здравстуй Victor.

Здесь дома все зачиталось вместе с таблицами. Завтра попробую на работе тебе
напишу. Поясни мне пожалуста следующий момент.
При объявлении функции типа CALLBACK объявляется и ее параметры в данном
случае
DWORD CALLBACK VEditStreamCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG
cb,LONG *pcb)
В теле основной процедуры имеется только ссылка на процедуру. Каков механизм
обмена параметрами?

Обязательно ли функции CALLBACK должны быть глобальными?

Владимир

-*Информационный канал 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

   "vlad" 2003-11-19 19:06:41 (#22585)

Re: Новости дискуссионного листа "Программирование. Форум !!!"

Привет !

> Да 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

   2003-11-19 08:36:58 (#22171)