[b]关于visual c++的问题如何读取 richeidt 中的数据[/b](100分)

  • 主题发起人 主题发起人 ly_chuan
  • 开始时间 开始时间
L

ly_chuan

Unregistered / Unconfirmed
GUEST, unregistred user!
关于visual c++的问题
如何读取 CRichEditView 中显示(没有保存过)的数据(保持rtf格式)到 char * buffer 中,用GetWindowsText() 或者 GetDlgTtemText() 之类的只能读取到纯文本,格式信息都丢失了;
最好给个例子
最好恢复到email
Email : nnn2000@163.com
谢谢
给各位大哥 大姐!!!!!!!!!!!!!帮帮忙吧!!!!!!
 
用CRichEditCtrl的StreamOut.如下:
CFile cFile(TEXT("myfile.rtf"), CFile::modeCreate|CFile::modeWrite);
EDITSTREAM es;
es.dwCookie = (DWORD) &cFile;
es.pfnCallback = MyStreamOutCallback;
MyRichEditView->GetRichEditCtrl().StreamOut(SF_RTF, es);
具体用法看MSDN上有.
 
DWORD CCEPEditView::MyStreamInCallback(DWORD dwCookie,LPBYTE pbBuff,LONG cb,LONG *pcb)
{
_CEP_EDITVIEW_* pCEPEditView = reinterpret_cast<_CEP_EDITVIEW_*>(dwCookie);
* pcb = pCEPEditView->pFile->Read(pbBuff, cb);
return 0;
}
DWORD CCEPEditView::MyStreamOutCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
_CEP_EDITVIEW_* pCEPEditView = reinterpret_cast<_CEP_EDITVIEW_*>(dwCookie);
pCEPEditView->pFile->Write(pbBuff, cb);
*pcb = cb;
return 0;

}
void CCEPEditView::ShowStream(CString &amp;strRtfData,BOOL isRtf)
{

CStringA strAnsiRtf(strRtfData);
if (strAnsiRtf.IsEmpty())
return;

m_isEnableUpdate = TRUE;
//AfxMessageBox(strRtfData);

CMemFile memTempFile(10240);
int nCount = strAnsiRtf.GetLength();
memTempFile.Write(strAnsiRtf.GetBuffer(nCount),nCount);
memTempFile.SeekTobegin
();
_CEP_EDITVIEW_ wndEditView;
wndEditView.pFile = &amp;memTempFile;
wndEditView.pThis = this;
EDITSTREAM es;
es.dwCookie = reinterpret_cast<DWORD>( &amp;wndEditView);

es.dwError = 0;
es.pfnCallback = MyStreamInCallback;
//m_pEditCtrl->SetWindowText(_T(""));
if (isRtf)
{
m_pEditCtrl->StreamIn(SF_RTF,es);
}
else
{
m_pEditCtrl->StreamIn(SF_TEXT,es);
}
m_isEnableUpdate = FALSE;
//m_pEditCtrl->StreamIn(SF_TEXT,es);
//m_pEditCtrl->StreamOut(SFF_SELECTION,es);
}
自己看吧。
 
后退
顶部