简易文本编辑器
面向对象程序设计课程设计报告
(2011/2012 学年第二学期)
题目名称
系
部
业
专
班
级
学
生
完成时间
简单文本编辑器的设计
计算机科学与技术
2012 年 6 月
指导老师
1
简易文本编辑器
引 言
在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。文字存放于一
个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。
第一个文本编辑器是一种行编辑器,它运行在打字机型的终端上,这种编辑器并不
具备在窗口和屏幕中显示的功能。它包含了一些非常短的命令(为了减少打字量)。其
中一个命令能够把文件的指定部分通过打字机打印出来。编辑光标是想象中的一个插入
点,通过特殊命令,可以把它移动到特定内容字符串所在的行。随后,内容字符串又被
扩展成正则表达式。如果想看到文件的变化,你需要把它打印出来。相对于穿孔机来说,
人们认为这种基于行的文本编辑器具有革命性的进步。如果没有它,用户就需要把那些
处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。
当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。
最早的全屏编辑器中,有一种叫做 O26,它是于 1967 年为 CDC 6000 系列机器的操作控
制台而作的。另外一个早期的全屏编辑器是 vi。vi 诞生于 20 世纪 70 年代,至今,它
仍是 Unix 和 Linux 的标准编辑器。全屏编辑器对视频终端的销售起到了促进的作用。
文本编辑器在 Windows 的应用中是一个非常重要的项目,在过去十数年中,微软对
windows 文本编辑器有多个版本的升级改进,而基于其他的编程环境的文本编辑器也是
多如牛毛,今天我们用 MFC 可视化编译环境做一个简易的文本编辑器。
2
简易文本编辑器
目 录
引 言 ............................................. 2
1.课程设计目的和意义 ................................ 4
2.详细设计 ......................................... 4
2.1 需求描述 ...........................................................4
2.1.1
2.1.2
2.1.3
2.1.4
2.1.5
文件 ...................................................................................................................................4
编辑 ...................................................................................................................................4
应用 ...................................................................................................................................5
帮助 ...................................................................................................................................5
高级 ...................................................................................................................................5
2.2 功能描述 ...........................................................5
2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.2.6
2.2.7
2.2.7
文本编辑区.......................................................................................................................5
文件 ...................................................................................................................................7
编辑 .................................................................................................................................15
应用 .................................................................................................................................16
帮助 .................................................................................................................................21
高级 .................................................................................................................................22
菜单栏.............................................................................................................................25
图标 .................................................................................................................................26
2.3 程序运行说明 ......................................................27
3.课程设计总结 .....................................30
3.1 编程日志 ..........................................................30
3.3 测试报告 ..........................................................31
4.心得体会 ........................................ 31
5.参考文献 ........................................ 31
3
简易文本编辑器
1.课程设计目的和意义
《面向对象程序设计》课程设计是实践性教学环节之一,是《面向对象程序设计》
课程的辅助教学课程。该课程设计要求学生综合运用在《面向对象程序设计》课程中学
到的面向对象技术与实际编程相结合,独立完成一项较为完整、并具有一定实际功能的
课程设计任务,同时加深学生对面向对象和 C++编程技术的理解和掌握,培养实际的应
用程序开发能力。在课程设计过程中,使学生养成良好的程序设计风格,并掌握 C++应
用程序的设计开发过程和编程方法、测试方法
2.详细设计
2.1 需求描述
简单文本编辑器的设计是基于Microsoft Visual Studio 2008开发的一款小型的软
件,主要的设计是为了满足普通用户对文本文档进行一般的简单操作,通过MFC可视化编
程环境,直接生成一个友好的用户操作界面,通过这个窗口,用户可以对文本进行如下
的基本操作。
2.1.1 文件
1 新建:创建一篇空白文档,从“工具栏”或“文件下拉菜单”中创建
② 打开:打开文本(.txt)文件,从“工具栏”或“文件下拉菜单”中打开;或将文
本(.txt)文件拖入程序界面打开或应用程序图标上打开;或右键单击文本文件,在“打
开方式”中选择本程序打开
2 保存:保存文档,从“工具栏”或“文件下拉菜单”中打开
④ 另存为:保存文件副本,在不同位置或以不同文件名保存文档,从“工具栏”或“文
件下拉菜单”中另存
2.1.2 编辑
① 撤销:撤销前一步所进行的操作,从“编辑下拉菜单”或“右键菜单”中撤销
3 删除:删除当前选定字符(串),从“编辑下拉菜单”或“右键菜单”中删除
4 剪切:复制并删除选定字符(串),从“编辑下拉菜单”或“右键菜单”中剪切
5 复制:复制选定字符(串),“编辑下拉菜单”或“右键菜单”中复制
6 粘贴:对粘贴内容进行粘贴,从“编辑下拉菜单”或“右键菜单”中粘贴
7 全选:对文本编辑框中文本全部选定,从“编辑下拉菜单”或“右键菜单”中全
4
简易文本编辑器
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
进行控制的,代码中使用的是图形至于文本输入的下方并设置为透明,在下面的文本编
辑区下层有一张写有内容的图片作为装饰,换行等动作惠济路插入符位置并按照坐标进
5
简易文本编辑器
行绘制,文本框的大小改变等会导致文本编辑区的重绘,所以在改变文本框时必须调用
函数对文本框中的内容进行保存,相关代码如下所示:
BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC)
{
CDC memDC;
memDC.CreateCompatibleDC(pDC);//创建内存设备上下文
memDC.SelectObject(&m_Bitmap);//将位图选入设备上下文
BITMAP m_Bmp; //声明位图控件
m_Bitmap.GetBitmap(&m_Bmp); //获得位图信息
int x = m_Bmp.bmWidth; //获取图片宽度
int y = m_Bmp.bmHeight; //获取图片高度
CRect rect; //声明矩形区域对象
GetClientRect(rect); //获取编辑区大小矩形框
pDC->StretchBlt(0,0,rect.Width(),rect.Height(),&memDC,0,0,x,y,SRCCOPY);
//伸展铺上图片
memDC.DeleteDC();//释放内存设备上下文
return TRUE;
//return CEdit::OnEraseBkgnd(pDC);
}
void CBmpEdit::OnChange()
{
}
Invalidate(); //刷新用户界面
HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor)
{
}
pDC->SetBkMode(TRANSPARENT); //设置文字背景透明
return NULL;
void CBmpEdit::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar * pScrollBar)
{
}
CEdit::OnVScroll(nSBCode, nPos, pScrollBar); //判断滚动条是否滑动
Invalidate(); //刷新用户界面
void CBmpEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
int n1,n2;
6
简易文本编辑器
n1 = GetScrollPos (SB_VERT);
CEdit::OnKeyDown(nChar, nRepCnt, nFlags);
n2 = GetScrollPos (SB_VERT);
if (n1 != n2) //判断滚动条是否滑动
Invalidate(); //刷新用户界面
{
}
}
BOOL CBmpEdit::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
}
BOOL editS = CEdit::OnMouseWheel(nFlags, zDelta, pt);
Invalidate(); //刷新用户界面
return editS;
2.2.2 文件
新建
新建菜单使用的是MFC自带的系统函数中的FILE等函数指令在massagebox的功能实
现模块,其中在新建文档的时候需要对文本的编辑区进行判断,对文本框中存在的文本
进行存档,而新建的文档就是对文本编辑区进行重绘,对原有的内容进行存储和销毁,
详细代码如下所示:
void CEasyTXTDlg::OnMenuNew()
{//新建前对现有文本的的处理
isModified = m_Edit.GetModify();//获取文本修改标记
CString string;
m_Edit.GetWindowText(string);
if (isNew && string.IsEmpty())//若是新建文本且文本无内容内容
{
}
;
else if(isModified) //如果文本已被修改,分情况讨论
{
int Choice = MessageBox("当前文本已被修改,想保存吗?","系统提示",
MB_YESNO|MB_ICONQUESTION); //弹出消息对话框询问
7
简易文本编辑器
if(Choice==IDYES) //选择“是”
{
}
OnMenuSave();//调用保存函数保存文件
}//新建
m_Edit.SetSel(0, -1); //全部选中文本内容
m_Edit.Clear();//将所有文本删除
isNew = TRUE; //标记为新建文本
m_Edit.SetModify(FALSE); //文本修改标记设为未修改
}
打开
菜单栏的打开使用的拖入和图标打开,其中使用了MFC中自带的打开对话框,这样的
使用和拖入的使用均是使用了自带的函数,其中重点是在运行的过程中对绝对路径的获
取以及特定格式文件的打开和提取,对不正确的格式进行massagebox的消息盒子提醒,
详细代码如下:
void CEasyTXTDlg::OnDropFiles(HDROP hDropInfo)
{
char *lpszFileName=new char[512];
int nFileCount,i; nFileCount=::DragQueryFile
(hDropInfo,0xFFFFFFFF,NULL,512);
for (i=0;i