C++课程设计报告简易文本编辑器文档格式.docx
《C++课程设计报告简易文本编辑器文档格式.docx》由会员分享,可在线阅读,更多相关《C++课程设计报告简易文本编辑器文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
![C++课程设计报告简易文本编辑器文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/9a973e54-ccce-482e-a0a2-5178573e05c8/9a973e54-ccce-482e-a0a2-5178573e05c81.gif)
1新建:
创建一篇空白文档,从“工具栏”或“文件下拉菜单”中创建
②打开:
打开文本(.txt)文件,从“工具栏”或“文件下拉菜单”中打开;
或将文本(.txt)文件拖入程序界面打开或应用程序图标上打开;
或右键单击文本文件,在“打开方式”中选择本程序打开
2保存:
保存文档,从“工具栏”或“文件下拉菜单”中打开
④另存为:
保存文件副本,在不同位置或以不同文件名保存文档,从“工具栏”或“文件下拉菜单”中另存
2.1.2编辑
①撤销:
撤销前一步所进行的操作,从“编辑下拉菜单”或“右键菜单”中撤销
3删除:
删除当前选定字符(串),从“编辑下拉菜单”或“右键菜单”中删除
4剪切:
复制并删除选定字符(串),从“编辑下拉菜单”或“右键菜单”中剪切
5复制:
复制选定字符(串),“编辑下拉菜单”或“右键菜单”中复制
6粘贴:
对粘贴内容进行粘贴,从“编辑下拉菜单”或“右键菜单”中粘贴
7全选:
对文本编辑框中文本全部选定,从“编辑下拉菜单”或“右键菜单”中全
2.1.3应用
①查找/替换:
输入查找内容(和替换内容),可从光标位置逐个查找(或替换)相应内容,也可一次性全部替换掉相应内容,从“工具栏”或“应用下拉菜单”中执行
②字体设置:
设置字体、字形及字的大小,从“工具栏”或“应用下拉菜单”中设置字体
③统计字符串:
统计用户输入的字符串出现次数,从“工具栏”或“应用下拉菜单”中执行
④统计字数:
统计所有字符数、中文字符数、英文字符数、数字字符数和空格数,从“工具栏”或“应用下拉菜单”中启动
2.1.4帮助
①关于EasyTXT:
显示关于本程序的信息,从“帮助下拉菜单”中启动
②帮助:
显示程序帮助文档,包括程序功能、使用、简要说明等各种信息,从“工具栏”或“帮助下拉菜单”中启动
2.1.5高级
①关联注册:
向注册表添加SLW文件关联,改变文本(.txt)文件图标,并使文本(.txt)文件可单击右键后选择用本程序打开(部分功能重启或注销后方能生效)
②还原注册:
取消注册,文本(.txt)文件还原为默认图标,不能右键打开(部分功能重启或注销后方能生效)
2.2功能描述
2.2.1文本编辑区
本程序的编译框架为MFC,功能的实现使用的是模块化的编程方式进行,由于使用的是MFC可视化编程,所以其中的很多过程使用的是相关的系统自带函数实现的,其中整个编辑器的编辑区使用的是MFC自动生成的文本框,但是这个文本框没有插入符,不能实现文字编辑功能,所以需要在程序的CEasyTXTView中插入一些特定的文本编辑函数,如插入符函数cwnd:
:
createsolidcreat,这个函数默认的为隐藏,所以在后面需要showcreate()才能正常显示,而整个编辑器的操作编辑部分使用的是一个独立的*.CPP进行控制的,代码中使用的是图形至于文本输入的下方并设置为透明,在下面的文本编辑区下层有一张写有内容的图片作为装饰,换行等动作惠济路插入符位置并按照坐标进行绘制,文本框的大小改变等会导致文本编辑区的重绘,所以在改变文本框时必须调用函数对文本框中的内容进行保存,相关代码如下所示:
BOOLCBmpEdit:
OnEraseBkgnd(CDC*pDC)
{
CDCmemDC;
memDC.CreateCompatibleDC(pDC);
//创建内存设备上下文
memDC.SelectObject(&
m_Bitmap);
//将位图选入设备上下文
BITMAPm_Bmp;
//声明位图控件
m_Bitmap.GetBitmap(&
m_Bmp);
//获得位图信息
intx=m_Bmp.bmWidth;
//获取图片宽度
inty=m_Bmp.bmHeight;
//获取图片高度
CRectrect;
//声明矩形区域对象
GetClientRect(rect);
//获取编辑区大小矩形框
pDC->
StretchBlt(0,0,rect.Width(),rect.Height(),&
memDC,0,0,x,y,SRCCOPY);
//伸展铺上图片
memDC.DeleteDC();
//释放内存设备上下文
returnTRUE;
//returnCEdit:
OnEraseBkgnd(pDC);
}
voidCBmpEdit:
OnChange()
Invalidate();
//刷新用户界面
HBRUSHCBmpEdit:
CtlColor(CDC*pDC,UINTnCtlColor)
SetBkMode(TRANSPARENT);
//设置文字背景透明
returnNULL;
OnVScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
CEdit:
OnVScroll(nSBCode,nPos,pScrollBar);
//判断滚动条是否滑动
OnKeyDown(UINTnChar,UINTnRepCnt,UINTnFlags)
intn1,n2;
n1=GetScrollPos(SB_VERT);
OnKeyDown(nChar,nRepCnt,nFlags);
n2=GetScrollPos(SB_VERT);
if(n1!
=n2)//判断滚动条是否滑动
{
Invalidate();
}
OnMouseWheel(UINTnFlags,shortzDelta,CPointpt)
BOOLeditS=CEdit:
OnMouseWheel(nFlags,zDelta,pt);
returneditS;
2.2.2文件
新建
新建菜单使用的是MFC自带的系统函数中的FILE等函数指令在massagebox的功能实现模块,其中在新建文档的时候需要对文本的编辑区进行判断,对文本框中存在的文本进行存档,而新建的文档就是对文本编辑区进行重绘,对原有的内容进行存储和销毁,详细代码如下所示:
voidCEasyTXTDlg:
OnMenuNew()
{//新建前对现有文本的的处理
isModified=m_Edit.GetModify();
//获取文本修改标记
CStringstring;
m_Edit.GetWindowText(string);
if(isNew&
&
string.IsEmpty())//若是新建文本且文本无内容内容
;
elseif(isModified)//如果文本已被修改,分情况讨论
intChoice=MessageBox("
当前文本已被修改,想保存吗?
"
"
系统提示"
MB_YESNO|MB_ICONQUESTION);
//弹出消息对话框询问
if(Choice==IDYES)//选择“是”
{
OnMenuSave();
//调用保存函数保存文件
}
}//新建
m_Edit.SetSel(0,-1);
//全部选中文本内容
m_Edit.Clear();
//将所有文本删除
isNew=TRUE;
//标记为新建文本
m_Edit.SetModify(FALSE);
//文本修改标记设为未修改
打开
菜单栏的打开使用的拖入和图标打开,其中使用了MFC中自带的打开对话框,这样的使用和拖入的使用均是使用了自带的函数,其中重点是在运行的过程中对绝对路径的获取以及特定格式文件的打开和提取,对不正确的格式进行massagebox的消息盒子提醒,详细代码如下:
OnDropFiles(HDROPhDropInfo)
{
char*lpszFileName=newchar[512];
intnFileCount,i;
nFileCount=:
DragQueryFile(hDropInfo,0xFFFFFFFF,NULL,512);
for(i=0;
i<
nFileCount;
i++)
{
UINTnChars=:
DragQueryFile(hDropInfo,i,&
lpszFileName[0],512);
CStringstr(&
lpszFileName[0],nChars);
//获得文件路径//打开前对现有文本的的处理
isModified=m_Edit.GetModify();
CStringstring;
m_Edit.GetWindowText(string);
if(isNew&
;
elseif(isModified)//如果文本已被修改,分情况讨论
intChoice=MessageBox("
if(Choice==IDYES)//选择“是”
{
OnMenuSave();
}
CStringstrText="
;
SavePath=str;
intn=SavePath.ReverseFind('
.'
);
CStringstl=SavePath.Right(SavePath.GetLength()-n-1);
if(stl=="
txt"
||stl=="
TXT"
c"
C"
cpp"
CPP"
||stl=="
h"
H"
xml"
XML"
html"
HTML"
)
CFilefile(str,CFile:
modeReadWrite);
//以读与写方式打开文件//拖入打开
m_Edit.SetSel(0,-1);
m_Edit.Clear();
charread[50000];
file.Read(read,50000);
//读取文件内容
for(unsignedi=0;
file.GetLength();
strText+=read[i];
//把文件内容赋值给CString变量
}
file.Close();
//关闭文件
m_Edit.SetWindowText(strText);
isNew=FALSE;
//标记为打开文本
m_Edit.SetModify(FALSE);
//文本修改标记设为修改
else
MessageBox("
不支持的文件类型!
打开错误"
}
:
DragFinish(hDropInfo);
//释放内存
i=0;
delete[]lpszFileName;
OpenFile()
CStringstrCmdLine=GetCommandLine();
inttotalLen=strCmdLine.GetLength();
inti=0;
intindex=0;
//循环统计字符个数
for(i=0,index=0;
i<
3;
i++,index++)
index=strCmdLine.Find("
\"
index);
//查找字符串
if(index!
=0)
for(i=index;
i<
totalLen-1;
i++)
SavePath+=strCmdLine.GetAt(i);
CStringstrText;
CFilefile(SavePath,CFile:
//以读与写方式打开文件
//把文件内容赋值给CString变量
//在编辑框中显示文件内容
Invalidate();
isNew=TRUE;
else
m_Edit.SetModify(FALSE);
isNew=TRUE;
m_Edit.SetSel(0,0);
保存
保存使用的是MFC中自带的模块进行的,第一次的保存即为另存为,当文档已经创建以后,文本的保存就改变为把文本编辑区的内容重新写入同一个绝对地址的文本文档中,其中声明和调用的详细代码如下:
OnMenuSave()
if(isNew)//对新建且未保存的文本调用“另存为”进行保存
OnMenuSaveas();
//新建文本已保存
else//对打开的文件修改后进行保存
charwrite[50000];
CFilefile(_T(SavePath),CFile:
modeCreate|CFile:
//以读与写方式创建文件
m_Edit.GetWindowText(strText);
//获取编辑框中的内容
strcpy(write,strText);
//将编辑框中的内容赋值给字符串数组
file.Write(write,strText.GetLength());
//把编辑框中的内容写入文件
file.Close();
//关闭文件
//设置修改标记为未修改
另存为
另存为是一种特殊的保存形式,另存为在应用的时候是用户用过FILE等函数寻找一个绝对地址并按照现有格式进行保存,在今后的另存为命令中,不会对相同绝对地址相同文件名的文件进行保存,而是在弹出消息对话框用户确认覆盖操作以后才将原有的文件进行删除操作然后把新内容的文件生成在用户选定的绝对地址下,详细代码如下:
OnMenuSaveas()
CFileStatusfs;
//文件存在状态
CFileDialogdlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"
AllFiles(*.txt)|*.txt||"
AfxGetMainWnd());
//构造“文件另存为”对话框
CStringstrPath,strText="
charwrite[50000];
if(dlg.DoModal()==IDOK)//判断按下“另存为”
strPath=dlg.GetPathName();
//获取文件另存为路径
if(strPath.Right(4)!
="
.txt"
strPath+="
//设置文件扩展名为txt
if(CFile:
GetStatus(_T(strPath),fs))//如果文件存在
{
CStringinfo=strPath;
info+="
已存在。
\r\n要替换它吗?
intnChoice=MessageBox(info,"
另存为"
MB_ICONWARNING|MB_YESNO);
//弹出确认替换消息
if(nChoice==IDYES)//如果确认替换
SavePath=strPath;
//获取保存新建文本的路径
CFilefile(_T(strPath),CFile:
modeWrite);
//以只写方式创建文件
//获取编辑框中的内容
//将编辑框中的内容赋值给字符串数组
file.Write(write,strText.GetLength());
//把编辑框中的内容写入文件
file.Close();
//关闭文件
isNew=FALSE;
m_Edit.SetModify(FALSE);
else//不替换
OnMenuSaveas();
//弹出另存对话框
else//如果文件不存在
SavePath=strPath;
//获取保存新建文本的路径
CFilefile(_T(strPath),CFile:
//以只写方式创建文件
m_Edit.GetWindowText(strText);
//获取编辑框中的内容
strcpy(write,strText);
//将编辑框中的内容赋值给字符串数组
file.Write(write,strText.GetLength());
//把编辑框中的内容写入文件
}
CRectrect(15,80,586,686);
InvalidateRect(rect);
//刷新用户界面
退出
OnClose()
//获取文本修改标记
m_Edit.GetWindowText(stri