1.2.6 多文档示例本节演示了一个极为简单多文档程序。 1.实例说明本示例是一个简单的文本编辑程序,可以同时编辑多个文本。功能有新建文本、打开文本,保存文本。 2.实现具体代码如下: (1)新建一个多文档工程Ex010206,在应用程序向导的第6步,将视图类的基类改成CRichEditView。在完成时会弹出对话框询问是否支持OLE(如图1-54所示),单击“确定”按钮加入OLE支持。
图1-54 是否支持OLE (2)利用类向导重载CEx010206NewDoc类的函数OnOpenDocument,代码如下: BOOL
CEx010206Doc::OnOpenDocument(LPCTSTR lpszPathName) {
if (!CRichEditDoc::OnOpenDocument(lpszPathName))
return FALSE;
bool bRet = TRUE ;//记录返回值
CRichEditView *pView = NULL ;
char * pfileContent = NULL ;
//读取文件内容
CFile file ;
try
{
file.Open(lpszPathName,CFile::modeRead);
pfileContent = new char[file.GetLength()
+ 1 ] ;//动态数组
memset(pfileContent, 0 , file.GetLength() + 1 );
file.ReadHuge(pfileContent,file.GetLength());
file.Close();
}
catch(CFileException * e)
{
ASSERT(false);
e->m_cause ;
bRet = FALSE ;
goto end ;
}
pView = GetView();
if(NULL == pView)
{
bRet = FALSE ;
goto end ;
}
{//不以在goto之后定义变量,所以只好加一个大括号
CRichEditCtrl& edit
= pView->GetRichEditCtrl();
edit.SetWindowText(pfileContent);
//设置为未修改,避免关闭的时候弹出提示保存对话框
SetModifiedFlag(false);
goto end ;
}
end:
if(NULL != pfileContent)
{
delete [] pfileContent ;
pfileContent = NULL ;
}
return bRet; } (3)利用类向导重载CEx010206NewDoc类的函数OnSaveDocument,代码如下: BOOL
CEx010206Doc::OnSaveDocument(LPCTSTR lpszPathName) {
//取得多功能编辑框的内容
CString strText ;
CRichEditView *pView = GetView();
if(NULL == pView)
return false
;
CRichEditCtrl &edit = pView->GetRichEditCtrl();
edit.GetWindowText(strText);
//将内容存进文件
CFile file ;
try
{
file.Open(lpszPathName,CFile::modeCreate|CFile::modeWrite);
file.WriteHuge((LPCTSTR)strText,strText.GetLength());
file.Close();
}
catch(CFileException * e)
{
ASSERT(false);
e->m_cause ;
return false
;
}
return
CRichEditDoc::OnSaveDocument(lpszPathName); } (4)按Ctrl + F5键创建并运行Ex010206.exe。随便输入一些内容,单击“保存”按钮。再单击“新建”按钮,再输入一些内容,再单击“保存”按钮。关闭程序,再依次打开两个文档,选择菜单“窗口→平铺”命令,效果如图1-55所示。
图1-55 Ex010206.exe运行效果 3.已知问题该示例的功能划分不当。通常文档类应该只处理数据,打开文档时应该只列新数据,而不处理显示。但因为这个问题与本节关系不大,所以暂不修改。 注意:重载了两个函数,完成了如下功能: (1)选择菜单“文件→打开”命令。 (2)选择菜单“文件→保存”命令。 (3)选择菜单“文件→另存为”命令。 (4)选择菜单“文件→最近文件”命令。 (5)使用命令行打开文件。 因为工具栏上的“打开”、“保存”按钮的菜单项的ID项相同,故不单独列出。
|
|