Loading......
Feb
2
作者:quke.cn   |   分类:VC/C++

 如何把里面的数据写入到文件?

RichEdit控件中为我们提供了一个函数long StreamOut(int nFormat, EDITSTREAM &es)

1.我们来讲讲一些介绍,当然你懂了也可以不用看。
EDITSTREAM是什么?
它是一个结构,它有三个成员变量,这里我们只要用到二个就够了。
typedef struct _editstream
{
 DWORD_PTR dwCookie;  // 一般我们用来存参数
 DWORD   dwError;  // Last error 
 EDITSTREAMCALLBACK pfnCallback; //回调函数
} EDITSTREAM;

这个回调函数的格式为

//这个回调名称是可以变的(废话)
DWORD CALLBACK SaveCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb)
{
 //写入文件
 ((CFile *)(LONGLONG)(dwCookie))->Write(pbBuff,cb);

 return 0;
}

 


2.现在我来讲讲如何实现

 a)创建文件或者打开文件
 b)设置回调函数
 c)调用StreamOut
 d)回调函数中写入文件
 e)记得要关闭文件

那么我就从代码上讲解给大家听
bool SaveMessage(LPCTSTR pszFileName)
{
 //首先,我们得创建一个文件
 CString strFileName=pszFileName;

 //打开文件
 if (strFileName.IsEmpty()==true)
 {
  CFileDialog FileDlg(FALSE,TEXT("RTF"),0,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,TEXT("信息文件(*.RTF)|*.RTF||"),this);
  if (FileDlg.DoModal()==IDOK) strFileName=FileDlg.GetPathName();
  else return true;
 }

 //打开文件
 CFile File;
 if (File.Open(strFileName,CFile::modeWrite|CFile::modeCreate,NULL)==FALSE) return false;

 //构造数据
 EDITSTREAM EditStream;
 EditStream.pfnCallback=SaveCallBack; //这是我们的回调函数
 EditStream.dwCookie=(DWORD)(LONGLONG)(&File);

 //写入文件
     StreamOut(SF_RTF,EditStream);
 File.Close();

 return true;
}

//保存回调
DWORD CALLBACK SaveCallBack(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb)
{
 //写入文件
 ((CFile *)(LONGLONG)(dwCookie))->Write(pbBuff,cb);

 return 0;
}


3.那么有人会问,保存的文件只能是RTF吗?

当然也可以是TXT文件,你们有没有注意到StreamOut的第一个参数,SF_RTF就是RTF文件,要是SF_TEXT就是TXT文件了

内容载入中...
  姓名(必填)
  邮箱(选填)
  主页(选填)
内容载入中...