如何把里面的数据写入到文件?
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文件了
下载源代码