版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简易文本编辑器面向对象程序设计课程设计报告(2011/2012学年第二学期)题目名称 简单文本编辑器的设计系部 专 业计算机科学与技术一班级学生完成时间 2012 年6月指导老师ii简易文本编辑器引言在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。文字存放于一 个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。第一个文本编辑器是一种行编辑器, 它运行在打字机型的终端上,这种编辑器并不 具备在窗口和屏幕中显示的功能。它包含了一些非常短的命令(为了减少打字量)。其中一个命令能够把文件的指定部分通过打字机打印出来。编辑光标是想象中的一个插入点,通过特殊命令,可以把它移动到特定内容字符串所
2、在的行。随后,内容字符串又被 扩展成正则表达式。如果想看到文件的变化,你需要把它打印出来。相对于穿孔机来说, 人们认为这种基于行的文本编辑器具有革命性的进步。如果没有它,用户就需要把那些 处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。 最早的全屏编辑器中,有一种叫做 O26它是于1967年为CDC 600藤列机器的操作控 制台而作的。另外一个早期的全屏编辑器是 vi。vi诞生于20世纪70年代,至今,它 仍是Unix和Linux的标准编辑器。全屏编辑器对视频终端的销售起到了促进的作用。文本编辑器在 Windows的
3、应用中是一个非常重要的项目,在过去十数年中,微软对 windows文本编辑器有多个版本的升级改进,而基于其他的编程环境的文本编辑器也是 多如牛毛,今天我们用MFCT视化编译环境做一个简易的文本编辑器。32目录引言 21 .课程设计目的和意义 42 .详细设计 42.1 需求描述 42.1.1 文件42.1.2 编辑42.1.3 应用52.1.4 帮助52.1.5 高级52.2 功能描述 52.2.1 文本编辑区52.2.2 文件72.2.3 编辑152.2.4 应用162.2.5 帮助212.2.6 高级222.2.7 菜单栏252.2.8 图标262.3 程序运行说明 273 .课程设计总结
4、 303.1 编程日志 303.3 测试报告 314 .心得体会 315 .参考文献 311 .课程设计目的和意义面向对象程序设计课程设计是实践性教学环节之一,是面向对象程序设计 课程的辅助教学课程。该课程设计要求学生综合运用在面向对象程序设计课程中学到的面向对象技术与实际编程相结合, 独立完成一项较为完整、并具有一定实际功能的 课程设计任务,同时加深学生对面向对象和 C+与程技术的理解和掌握,培养实际的应 用程序开发能力。在课程设计过程中,使学生养成良好的程序设计风格,并掌握C+戒用程序的设计开发过程和编程方法、测试方法2 .详细设计2.1 需求描述简单文本编辑器的设计是基于 Microso
5、ft Visual Studio 2008开发的一款小型的软件,主要的设计是为了满足普通用户对文本文档进行一般的简单操作,通过MFCJ视化编程环境,直接生成一个友好的用户操作界面,通过这个窗口,用户可以对文本进行如下 的基本操作。2.1.1 文件新建:创建一篇空白文档,从“工具栏”或“文件下拉菜单”中创建打开:打开文本(.txt )文件,从“工具栏”或“文件下拉菜单”中打开;或将文本(.txt )文件拖入程序界面打开或应用程序图标上打开; 或右键单击文本文件,在“打 开方式”中选择本程序打开保存:保存文档,从“工具栏”或“文件下拉菜单”中打开另存为:保存文件副本,在不同位置或以不同文件名保存文
6、档, 从“工具栏”或“文 件下拉菜单”中另存2.1.2 编辑撤销:撤销前一步所进行的操作,从“编辑下拉菜单”或“右键菜单”中撤销删除:删除当前选定字符(用),从“编辑下拉菜单”或“右键菜单”中删除剪切:复制并删除选定字符(用),从“编辑下拉菜单”或“右键菜单”中剪切复制:复制选定字符(用),“编辑下拉菜单”或“右键菜单”中复制粘贴:对粘贴内容进行粘贴,从“编辑下拉菜单”或“右键菜单”中粘贴全选:对文本编辑框中文本全部选定,从“编辑下拉菜单”或“右键菜单”中全2.1.3 应用 查找/替换:输入查找内容(和替换内容),可从光标位置逐个查找(或替换)相应 内容,也可一次性全部替换掉相应内容,从“工具
7、栏”或“应用下拉菜单”中执行字体设置:设置字体、字形及字的大小,从“工具栏”或“应用下拉菜单”中设置字体统计字符串:统计用户输入的字符串出现次数,从“工具栏”或“应用下拉菜单”中执行统计字数:统计所有字符数、中文字符数、英文字符数、数字字符数和空格数,从“工具栏”或“应用下拉菜单”中启动2.1.4 帮助关于EasyTXT显示关于本程序的信息, 帮助:显示程序帮助文档,包括程序 具栏”或“帮助下拉菜单”中启动从“帮助下拉菜单”中启动功能、使用、简要说明等各种信息,从“工2.1.5 高级 关联注册:向注册表添加SLWt件关联,改变文本(.txt )文件图标,并使文本(.txt ) 文件可单击右键后
8、选择用本程序打开(部分功能重启或注销后方能生效)还原注册:取消注册,文本(.txt )文件还原为默认图标,不能右键打开(部分功能 重启或注销后方能生效)2.2 功能描述2.2.1 文本编辑区本程序的编译框架为MFC功能的实现使用的是模块化的编程方式进行,由于使用的是MFCT视化编程,所以其中的很多过程使用的是相关的系统自带函数实现的,其中整 个编辑器的编辑区使用的是MFC!动生成的文本框,但是这个文本框没有插入符,不能 实现文字编辑功能,所以需要在程序的 CEasyTXTVie汕插入一些特定的文本编辑函数, 如插入符函数cwnd:createsolidcreat,这个函数默认的为隐藏,所以在后
9、面需要showcreate ()才能正常显示,而整个编辑器的操作编辑部分使用的是一个独立的 *.CPP 进行控制的,代码中使用的是图形至于文本输入的下方并设置为透明,在下面的文本编 辑区下层有一张写有内容的图片作为装饰,换行等动作惠济路插入符位置并按照坐标进 行绘制,文本框的大小改变等会导致文本编辑区的重绘,所以在改变文本框时必须调用 函数对文本框中的内容进行保存,相关代码如下所示: BOOL CBmpEdit:OnEraseBkgnd(CDC* pDC) CDC memDC;memDC.CreateCompatibleDC(pDC);创建内存设备上下文memDC.SelectObject(&
10、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
11、 TRUE; /return CEdit:OnEraseBkgnd(pDC); void CBmpEdit二OnChange() Invalidate。;/刷新用户界面 HBRUSH CBmpEdit:CtlColor(CDC* pDC, UINT nCtlColor) pDC-SetBkMode(TRANSPAREN砂设置文字背景透明 return NULL; void CBmpEdit:OnVScroll(UINT nSBCode, UINT nPos, CScrollBar * pScrollBar) CEdit:OnVScroll(nSBCode, nPos, pScrollBar);
12、 / 判断滚动条是否滑动Invalidate。;/刷新用户界面 void CBmpEdit:OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) int n1,n2;n1 = GetScro11Pos (SB_VERT);CEdit二OnKeyDown(nChar, nRepCnt, nFlags);n2 = GetScro11Pos (SB_VERT);if (n1 != n2)/判断滚动条是否滑动Invalidate。;/刷新用户界面BOOL CBmpEdit二OnMouseWheel(UINT nFlags, short zDelta, CPo
13、int pt)BOOL editS = CEdit二OnMouseWheel(nFlags, zDelta, pt);Invalidate。;/刷新用户界面return editS;2.2.2 文件新建新建菜单使用的是MFC!带的系统函数中的FILE等函数指令在massageboX勺功能实 现模块,其中在新建文档的时候需要对文本的编辑区进行判断,对文本框中存在的文本 进行存档,而新建的文档就是对文本编辑区进行重绘,对原有的内容进行存储和销毁, 详细代码如下所示:void CEasyTXTDlg二OnMenuNew()/新建前对现有文本的的处理isModified = m_Edit.GetMod
14、ify(); / 获取文本修改标记CString string;m_Edit.GetWindowText(string);if (isNew & string.IsEmpty() /若是新建文本且文本无内容内容;else if (isModified) /如果文本已被修改,分情况讨论int Choice = MessageBox(当前文本已被修改,想保存吗?,系统提示, MB_YESNO|MB_ICONQUESTION弹出消息对话框询问if (Choice=IDYES) / 选择“是” OnMenuSave();/调用保存函数保存文件 /新建 m_Edit.SetSel(0,-1);/全部选中
15、文本内容m_Edit.Clear(); /将所有文本删除 isNew = TRUE/标记为新建文本 m_Edit.SetModify(FALSE); /文本修改标记设为未修改 打开菜单栏的打开使用的拖入和图标打开,其中使用了 MFCP自带的打开对话框,这样的使用和拖入的使用均是使用了自带的函数,其中重点是在运行的过程中对绝对路径的获取以及特定格式文件的打开和提取,对不正确的格式进行massageboX勺消息盒子提醒,详细代码如下:void CEasyTXTDlg:OnDropFiles(HDROP hDropInfo) char *lpszFileName= new char 512;int
16、nFileCount,i; nFileCount=:DragQueryFile (hDropInfo,0xFFFFFFFF,NULL,512);for (i=0;inFileCount;i+)UINT nChars=:DragQueryFile (hDropInfo,i,&lpszFileName0,512);CString str(&lpszFileName0,nChars); / 获得文件路径 / 打开前对现有文 本的的处理isModified = m_Edit.GetModify(); / 获取文本修改标记CString string;m_Edit.GetWindowText(strin
17、g);if (isNew & string.IsEmpty() /若是新建文本且文本无内容内容 ;else if (isModified) /如果文本已被修改,分情况讨论int Choice = MessageBox当前文本已被修改,想保存吗?,系统提示, MB_YESNO|MB_ICONQUESTION弹出消息对话框询问if (Choice=IDYES) / 选择“是” OnMenuSave();/调用保存函数保存文件 CString strText=;SavePath = str;int n = SavePath.ReverseFind( .);CString stl = SavePath
18、.Right(SavePath.GetLength() - n - 1);if (stl = txt | stl = TXT | stl =c | stl =C | stl =cpp | stl = CPP| stl =h | stl =H | stl = xml | stl = XML | stl=html | stl =HTML)CFile file(str,CFile:modeReadWrite); / 以读与写方式打开文件/拖入打开m_Edit.SetSel(0, -1);/全部选中文本内容m_Edit.Clear(); /将所有文本删除 char read50000;file.Rea
19、d(read,50000); / 读取文件内容for (unsigned i=0;ifile.GetLength();i+) strText += readi; /把文件内容赋值给CString变量 file.Close(); / 关闭文件m_Edit.SetWindowText(strText);isNew = FALSE; /标记为打开文本m_Edit.SetModify(FALSE); /文本修改标记设为修改 else MessageBox (不支持的文件类型!,打开错误);二DragFinish (hDropInfo); / 释放内存i=0;delete lpszFileName;vo
20、id CEasyTXTDlg二OpenFile()CString strCmdLine = GetCommandLine();int totalLen = strCmdLine.GetLength();int i = 0;int index = 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);int
21、 n = SavePath.ReverseFind( .);CString stl = SavePath.Right(SavePath.GetLength() - n - 1);if (stl = txt | stl = TXT | stl =c | stl =C | stl =cpp | stl = CPP| stl =h | stl =H | stl = xml | stl = XML | stl=html | stl =HTML)CString strText;CFile file(SavePath,CFile:modeReadWrite); / 以读与写方式打开文件 char read
22、50000;file.Read(read,50000); / 读取文件内容for (unsigned i=0;iCreate(FALSE,NULL);/ 创建“替换”对话框dlg-ShowWindow(SW_SHOW);/ 显示“替换”对话框long CEasyTXTDlg:OnFindReplace(WPARAM wParam, LPARAM IParam) CString strText,repText;/ 声明字符串变量strText = dlg-GetFindString();/ 获得查找字符串CString str;/声明字符串变量m_Edit.GetWindowText(str);
23、/ 获得编辑框中是文本int len;if (dlg-ReplaceAll()部替换strText = dlg-GetFindString();符串repText = dlg-GetReplaceString();符串len = repText.GetLength();符串长度str.Replace(strText,repText);换查找字符申m_Edit.SetWindowText(str);显示在编辑框中nindex =0;m_Edit.SetModify(TRUE);记设为修改m_Edit.SetSel(0,-1);CRect rect (15,80,586,686);Invalida
24、teRect(rect);if (dlg-ReplaceCurrent()find = FALSE;/判断是否全/获得查找字/获得替换字/获得替换字/使用替换字符串替/将替换后的字符串/设置查找位置为初始/文本修改标/刷新界面/替换/进行替换elsefind = TRUE;变量if (find)换len = strText.GetLength();用的长度elseCString left,right;int num = strText.GetLength();符串的长度int strnum = str.GetLength();本长度if (!degree)index = str.Find(st
25、rText,nindex);框文本中的位置if (index GetReplaceString();len = repText.GetLength();度str = left + repText + right;m_Edit.SetWindowText(str);的字符串/进行查找/声明整型/判断是查找还是替/获得要查找字符/声明字符串变量/获得查找字/获得编辑框中文/判断为第一次替换/获得查找字符串在编辑/获得替换字符用左/获得替换字符用/获得替换字符用/获得替换字符串长/组合成新的字符串/在编辑框中显示新/文本修改标记设m_Edit.SetModify(TRUE);为修改strText =
26、 dlg-GetFindString();m_Edit.GetWindowText(str);本index = str.Find (strText,nindex);框文本中的位置m_Edit.SetSel(index,index+strText.GetLength();的字符串nindex = index+len;if (index = 0)degree = TRUE;elsedegree = FALSE;nindex = 0;m_Edit.SetFocus();CRect rect1 (15,80,586,686);InvalidateRect(rect1);return 0;字体设置voi
27、d CEasyTXTDlg二OnMenuFont()/ TODO: Add your control notification handler code here CFont* TempFont = m_Edit.GetFont();LOGFONT LogFont;TempFont-GetLogFont(&LogFont);/CFontDialog dlg(&LogFont);/获得查找字符申/获得编辑框中是文/获得查找字符串在编辑/选中查找或替换/设置起始查找位置/编辑框获得焦点/刷新界面/获取编辑框当前字体获取字体信息初始化字体信息if (dlg.DoModal()=IDOK)m_Font
28、.Detach();LOGFONT temp;dlg.GetCurrentFont(&temp);m_Font.CreateFontIndirect(&temp); m_Edit.SetFont(&m_Font);/分离字体/获取当前字体信息/直接创建字体/设置字体统计字符串void CEasyTXTDlg二OnMenuCountString() CString str;m_Edit.GetWindowText(str);CCountStringDlg dlg;dlg.SetText(str);dlg.DoModal();/获取编辑框文本/声明统计字符串对话框类对象/显示对话框统计字数void
29、 CEasyTXTDlg二OnMenuCountAll() int nTotalLenth = 0;int nCLenth = 0;int nELenth = 0;int nNLenth = 0;int nBLenth = 0;int nEnLenth = 0;int nEnterLenth = 0;CString strText;m_Edit.GetWindowText(strText);int Lenth = strText.GetLength();for (int i=0;iLenth;i+) /总共享数/中文/英文/数字/空格/半角字符/回车char c = strText.GetAt
30、(i);/获取当前字符中文字符if (c255)continue ; /英文字符 elseif (c = r)i +;nEnterLenth +;elsenEnLenth +;if (c =)nBLenth +;else if (c= 0nNLenth +;else if (c= a nELenth +;/回车符/跳过n/回车符计数加/空格数加& c= 9 ) /数字字符加&c= A & c = 0; nPathEnd-)/获得程序路径if (buffModulPathnPathEnd= )buffModulPathnPathEnd+1= 0 strcat(buffModulPath,CTex
31、tName);break; str3.Format( %s,(LPCTSTR)buffModulPath);DWORD dwPos;/ 创建 “ EasyTXTminiword应用程序”子键 value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset1,0,NULL,REG_OPTION_NON_VOLAT ILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos); / 将该子 键的“默认”数据项的数据设置为“用 EasyTXTminiword打开” value=RegSetValueEx(hres
32、ult,NULL,0,REG_SZ,( const BYTE*)(LPCTSTR)str1,str1.GetLength();/ 创建 “command 子键value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset2,0,NULL,REG_OPTION_NON_VOLAT ILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos); / 将该子 键的“默认”数据项的数据设置为 EasyTX0用程序的路径 value=RegSetValueEx(hresult,NULL,0,REG_SZ,( cons
33、t BYTE*)(LPCTSTR)str2,str2.GetLength(); / 创建 Default 项。value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset3Icon,0,NULL,REG_OPTION_NON_V OLATILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos/;将该子 键的“默认”数据项的数据设置为“ EasyTX得标” value=RegSetValueEx(hresult,NULL,0,REG_SZ,( const BYTE*)(LPCTSTR)str3,str3
34、.GetLength();二RegCloseKey(hresult);MessageBox (已将信息写入注册表,系统重启后生效。,系统提示); 还原注册注册的还原和注册原理是相同的,不同的是软件的还原注册是对注册表中已经添加 的键值进行删除操作,详细代码如下所示:void CEasyTXTDIg二OnMenuBackUp() int nChoice = MessageBox (即将还原系统注册表。rn确定要还原吗?,还原 信息”,MB_ICONWARNING|MB_YESNO);CString str1,str2,str3;if (nChoice = IDYES)HKEY hresult;l
35、ong value;LPCTSTR datasetl = txtfileshellOPEN ;/ 打开方式子键LPCTSTR dataset2 = txtfileshellOPENcommand ; / 启用程序路径子键LPCTSTR dataset3Icon = txfileDefaultIcon” ;/ 关联图标子键/获得三个子键默认的内容str1=用记事本打开;str2 = %SystemRoot%NotePad.exe %1;str3 = %SystemRoot%system32shell32.dll,-152” ;DWORD dwPos; /创建“我的应用程序”子键value=Reg
36、CreateKeyEx(HKEY_CLASSES_ROOT,dataset1,0,NULL,REG_OPTION_NON_VOLAT ILE,KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPOsH等该子键的“默认”数据项的数据设置为“用记事本打开”value=RegSetValueEx(hresult,NULL,0,REG_SZ,( constBYTE*)(LPCTSTR)str1,str1.GetLength(); / 仓I建command 子键value=RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset2,0,NULL,REG_OPTION_NON_VOLAT ILE,KEY_CREATE_SUB_KEY|KEY_AL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 运载工具驾驶和控制模拟器产品入市调查研究报告
- 越野摩托车产业深度调研及未来发展现状趋势
- 软凳产业深度调研及未来发展现状趋势
- 皮护腿套裤市场洞察报告
- 钓鱼铅坠项目可行性实施报告
- 菜单卡片夹产品入市调查研究报告
- 2025届平顶山市重点中学高三适应性调研考试英语试题含解析
- 浙江省桐乡市第一中学2025届高三下学期联考语文试题含解析
- 磨刀器具市场洞察报告
- 2025届福建省永春一中、培元、季延、石光中学高考冲刺数学模拟试题含解析
- 透水性材料施工技术方案
- k受体激动剂在临床中的应用
- 马铃薯栽培技术课件
- 砌体结构承载力计算
- 北京大学数字图像处理(冈萨雷斯)(课堂PPT)
- 4微笑着承受一切
- 台钻日常维护保养点检记录表
- 高考物理试题库-专题3.32-霍尔效应(解析版)
- xx年度中层干部述职指标及评分表
- 初二班家长会课件
- 大学体育课程教学计划(舞龙) (2)
评论
0/150
提交评论