C++课程设计报告简易文本编辑器_第1页
C++课程设计报告简易文本编辑器_第2页
C++课程设计报告简易文本编辑器_第3页
C++课程设计报告简易文本编辑器_第4页
C++课程设计报告简易文本编辑器_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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+g用程序的设计开发过程和编程方法、测试方法2 .详细设计2.1 需求描述简单文本编辑器的设计是基于 Microsof

5、t 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、amp;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();

11、/释放内存设备上下文return 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

12、, nPos, pScrollBar); / 判断滚动条是否滑动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 nFlag

13、s, short zDelta, CPoint pt)BOOL editS = CEdit二OnMouseWheel(nFlags, zDelta, pt);Invalidate。;/刷新用户界面return editS;2.2.2 文件新建新建菜单使用的是MFC!带的系统函数中的FILE等函数指令在massageboX勺功能实 现模块,其中在新建文档的时候需要对文本的编辑区进行判断,对文本框中存在的文本 进行存档,而新建的文档就是对文本编辑区进行重绘,对原有的内容进行存储和销毁, 详细代码如下所示:void CEasyTXTDlg二OnMenuNew()/新建前对现有文本的的处理isModi

14、fied = m_Edit.GetModify(); / 获取文本修改标记CString string;m_Edit.GetWindowText(string);if (isNew && string.IsEmpty() /若是新建文本且文本无内容内容;else if (isModified) /如果文本已被修改,分情况讨论int Choice = MessageBox("当前文本已被修改,想保存吗?","系统提示", MB_YESNO|MB_ICONQUESTION弹出消息对话框询问if (Choice=IDYES) / 选择“是” O

15、nMenuSave();/调用保存函数保存文件 /新建 m_Edit.SetSel(0,-1);/全部选中文本内容m_Edit.Clear(); /将所有文本删除 isNew = TRUE"/标记为新建文本 m_Edit.SetModify(FALSE); /文本修改标记设为未修改 打开菜单栏的打开使用的拖入和图标打开,其中使用了 MFCP自带的打开对话框,这样的使用和拖入的使用均是使用了自带的函数,其中重点是在运行的过程中对绝对路径的获取以及特定格式文件的打开和提取,对不正确的格式进行massageboX勺消息盒子提醒,详细代码如下:void CEasyTXTDlg:OnDropF

16、iles(HDROP hDropInfo) char *lpszFileName= new char 512;int nFileCount,i; nFileCount=:DragQueryFile (hDropInfo,0xFFFFFFFF,NULL,512);for (i=0;i<nFileCount;i+)UINT nChars=:DragQueryFile (hDropInfo,i,&lpszFileName0,512);CString str(&lpszFileName0,nChars); / 获得文件路径 / 打开前对现有文 本的的处理isModified =

17、m_Edit.GetModify(); / 获取文本修改标记CString string;m_Edit.GetWindowText(string);if (isNew && string.IsEmpty() /若是新建文本且文本无内容内容 ;else if (isModified) /如果文本已被修改,分情况讨论int Choice = MessageBox"当前文本已被修改,想保存吗?","系统提示", MB_YESNO|MB_ICONQUESTION弹出消息对话框询问if (Choice=IDYES) / 选择“是” OnMenuSa

18、ve();/调用保存函数保存文件 CString strText=""SavePath = str;int n = SavePath.ReverseFind( '.');CString stl = SavePath.Right(SavePath.GetLength() - n - 1);if (stl = "txt" | stl = "TXT" | stl ="c" | stl ="C" | stl ="cpp" | stl = "CPP"

19、| 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.Read(read,50000); / 读取文件内容for (unsi

20、gned i=0;i<file.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;void C

21、EasyTXTDlg二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 +

22、= strCmdLine.GetAt(i);int 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&qu

23、ot; | stl = "xml" | stl = "XML" | stl="html" | stl ="HTML')CString strText;CFile file(SavePath,CFile:modeReadWrite); / 以读与写方式打开文件 char read50000;file.Read(read,50000); / 读取文件内容for (unsigned i=0;i<file.GetLength();i+) strText += readi;把文件内容赋值给CString变量file.Cl

24、ose(); / 关闭文件 m_Edit.SetWindowText(strText); /在编辑框中显示文件内容 m_Edit.SetModify(FALSE); /文本修改标记设为未修改 isNew = FALSE;Invalidate。; else MessageBox ("不支持的文件类型!","打开错误"); m_Edit.SetModify(FALSE); /文本修改标记设为未修改 isNew = TRUE; else m_Edit.SetModify(FALSE); /文本修改标记设为未修改 isNew = TRUE; m_Edit.Set

25、Sel(0,0);保存保存使用的是MFCP自带的模块进行的,第一次的保存即为另存为,当文档已经创建 以后,文本的保存就改变为把文本编辑区的内容重新写入同一个绝对地址的文本文档 中,其中声明和调用的详细代码如下: void CEasyTXTDlg二OnMenuSave() if (isNew) /对新建且未保存的文本调用“另存为”进行保存OnMenuSaveas();/新建文本已保存else /对打开的文件修改后进行保存 CString strText="" char write50000;CFile file(_T(SavePath),CFile二modeCreate|CF

26、ile二modeReadWrite);/ 以读与写方式创建文件m_Edit.GetWindowText(strText); / 获取编辑框中的内容strcpy(write,strText); /将编辑框中的内容赋值给字符串数组file.Write(write,strText.GetLength();/ 把编辑框中的内容写入文件file.Close(); / 关闭文件m_Edit.SetModify(FALSE); /设置修改标记为未修改 m_Edit.SetSel(0,0);另存为另存为是一种特殊的保存形式,另存为在应用的时候是用户用过FILE等函数寻找一个绝对地址并按照现有格式进行保存,在今

27、后的另存为命令中,不会对相同绝对地址相 同文件名的文件进行保存,而是在弹出消息对话框用户确认覆盖操作以后才将原有的文 件进行删除操作然后把新内容的文件生成在用户选定的绝对地址下,详细代码如下:void CEasyTXTDlg二OnMenuSaveas()CFileStatus fs; /文件存在状态,AfxGetMainWnd(); / 构造”文件另存为”CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"All Files(*txt)|*txt|"对话框CString strPath,

28、strText= ""/判断按下“另存为”/获取文件另存为路径/设置文件扩展名为txt/如果文件存在char write50000;if (dlg.DoModal() = IDOK)strPath = dlg.GetPathName();if (strPath.Right(4) != ".txt")strPath += ".txt"if (CFile:GetStatus(_T(strPath),fs)CString info = strPath;info +="已存在。rn要替换它吗?int nChoice = Messag

29、eBox (info,"另存为",MB_ICONWARNING|MB_YESNO); 弹出确认替换消息if (nChoice = IDYES)/ 如果确认替换SavePath = strPath;/获取保存新建文本的路径CFile 巾le(_T(strPath),CFile:modeCreate|CFile:modeWrite);/ 以只写方式创建文件 m_Edit.GetWindowText(strText);/ 获取编辑框中的内容strcpy(write,strText);/将编辑框中的内容赋值给字符串数组file.Write(write,strText.GetLeng

30、th();/ 把编辑框中的内容写入文件 file.Close();/ 关闭文件isNew = FALSE; m_Edit.SetModify(FALSE); else/不替换 OnMenuSaveas();/弹出另存对话框else/如果文件不存在 SavePath = strPath; /获取保存新建文本的路径CFile file(_T(strPath),CFile:modeCreate|CFile:modeWrite);/ 以只写方式创建文件/获取编辑框中的内容/将编辑框中的内容赋值/把编辑框中的内容m_Edit.GetWindowText(strText); strcpy(write,st

31、rText);给字符串数组file.Write(write,strText.GetLength();写入文件file.Close();isNew = FALSE;m_Edit.SetModify(FALSE);m_Edit.SetSel(0,0);/刷新用户界面CRect rect (15,80,586,686);InvalidateRect(rect);退出void CEasyTXTDlg:OnClose()isModified = m_Edit.GetModify();CString string;m_Edit.GetWindowText(string);if (isNew &&a

32、mp; string.IsEmpty() CDialog:OnClose();/获取文本修改标记/若是新建文本且文本无内容内容/退出程序 else if(isModified)/如果文本已被修改,分情况讨论intQuitChoice = MessageBox("当前文本已被修改,想保存吗?","系统提示MB_YESNOCANCEL|MB_ICONQUESTION); / 弹出消息对话框询问if (QuitChoice=IDYES)OnMenuSave();if (isModified = FALSE) CDialog:OnClose();else if (Quit

33、Choice=IDNO)CDialog:OnClose();else/选择“是”/调用保存函数保存文件/退出程序/选择“否”/退出程序return/选择“取消”时不退出 elseCDialog:OnClose();/如果文本未被修改则直接退出程序2.2.3 编辑撤销撤销命令是系统自带的函数,使用是调用OnMenuUndO数命令,详细代码如下所示: void CEasyTXTDlg二OnMenuUndo() m_Edit.Undo();/撤销上一次的编辑框中的操作(单级撤销)删除删除命令调用的是系统自带函数,使用的是 OnMenuDelete®数命令,详细代码如下 所示:void CE

34、asyTXTDlg:OnMenuDelete() m_Edit.Clear();/删除编辑框中当前选中的文本剪切剪切命令调用的是系统自带函数,使用的是 OnMenueCuE数命令,详细代码如下所 示:void CEasyTXTDlg二OnMenuCut()m_Edit.Cut();/删除编辑控件中当前选中的文本,并将删除的文本拷贝到剪贴板中复制复制命令调用的是系统自带函数,使用的是 OnMenuCo曲数命令,详细代码如下所示:void CEasyTXTDlg二OnMenuCopy()m_Edit.Copy();/将编辑框中的当前选中文本拷贝到剪贴板中粘贴粘贴命令调用的是系统自带函数, 使用的是

35、OnMenuPast函数命令,详细代码如下所 示:void CEasyTXTDlg二OnMenuPaste()m_Edit.Paste();/在当前光标位置插入剪贴板内的文本全选全选命令调用的是系统自带函数, 使用的是OnMenuSelectAll函数命令,详细代码如 下所示:void CEasyTXTDlg:OnMenuSelectAll()m_Edit.SetSel(0, -1);/全部选中文本内容2.2.4 应用查找/替换查找和替换命令使用的是审查询,按照匹配的媳妇筛选,如果替换,则在替换时判 断是否为第一次的替换,替换时将记录字符串的位置并加以标记,按后进行替换,详细 代码如下所示:v

36、oid CEasyTXTDlg二OnMenuFindReplace()nindex = 0;degree = FALSE;index = 0;dlg = newCFindReplaceDialog;声明“查找/替换”对话框指针dlg->Create(FALSE,NULL);/ 创建“替换”对话框dlg->ShowWindow(SW_SHOW);/ 显示“替换”对话框long CEasyTXTDlg:OnFindReplace(WPARAM wParam, LPARAM IParam) CString strText,repText;/ 声明字符串变量strText = dlg-&g

37、t;GetFindString();/ 获得查找字符串CString str;/声明字符串变量m_Edit.GetWindowText(str);/ 获得编辑框中是文本int len;if (dlg->ReplaceAll()部替换strText = dlg->GetFindString();符串repText = dlg->GetReplaceString();符串len = repText.GetLength();符串长度str.Replace(strText,repText);换查找字符申m_Edit.SetWindowText(str);显示在编辑框中nindex =

38、0;m_Edit.SetModify(TRUE);记设为修改m_Edit.SetSel(0,-1);CRect rect (15,80,586,686);InvalidateRect(rect);if (dlg->ReplaceCurrent()find = FALSE;/判断是否全/获得查找字/获得替换字/获得替换字/使用替换字符串替/将替换后的字符串/设置查找位置为初始/文本修改标/刷新界面/替换/进行替换elsefind = TRUE;变量if (find)换len = strText.GetLength();用的长度elseCString left,right;int num =

39、 strText.GetLength();符串的长度int strnum = str.GetLength();本长度if (!degree)index = str.Find(strText,nindex);框文本中的位置if (index < 0)nindex = 0;degree = FALSE;return 1;left = str.Left(index);侧的字符串right = str.Right(strnum-index-num);右侧的字符串repText = dlg->GetReplaceString();len = repText.GetLength();度str

40、= left + repText + right;m_Edit.SetWindowText(str);的字符串/进行查找/声明整型/判断是查找还是替/获得要查找字符/声明字符串变量/获得查找字/获得编辑框中文/判断为第一次替换/获得查找字符串在编辑/获得替换字符用左/获得替换字符用/获得替换字符用/获得替换字符串长/组合成新的字符串/在编辑框中显示新/文本修改标记设m_Edit.SetModify(TRUE);为修改strText = dlg->GetFindString();m_Edit.GetWindowText(str);本index = str.Find (strText,nin

41、dex);框文本中的位置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;字体设置void CEasyTXTDlg二OnMenuFont()/ TODO: Add your control notification handler c

42、ode here CFont* TempFont = m_Edit.GetFont();LOGFONT LogFont;TempFont->GetLogFont(&LogFont);/CFontDialog dlg(&LogFont);/获得查找字符申/获得编辑框中是文/获得查找字符串在编辑/选中查找或替换/设置起始查找位置/编辑框获得焦点/刷新界面/获取编辑框当前字体获取字体信息初始化字体信息if (dlg.DoModal()=IDOK)m_Font.Detach();LOGFONT temp;dlg.GetCurrentFont(&temp);m_Font.C

43、reateFontIndirect(&temp); m_Edit.SetFont(&m_Font);/分离字体/获取当前字体信息/直接创建字体/设置字体统计字符串void CEasyTXTDlg二OnMenuCountString() CString str;m_Edit.GetWindowText(str);CCountStringDlg dlg;dlg.SetText(str);dlg.DoModal();/获取编辑框文本/声明统计字符串对话框类对象/显示对话框统计字数void CEasyTXTDlg二OnMenuCountAll() int nTotalLenth = 0

44、;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;i<Lenth;i+) /总共享数/中文/英文/数字/空格/半角字符/回车char c = strText.GetAt(i);/获取当前字符中文字符if (c<0|c>255)continue ;

45、 /英文字符 elseif (c = 'r')i +;nEnterLenth +;elsenEnLenth +;if (c ='')nBLenth +;else if (c>= '0'nNLenth +;else if (c>= 'a' nELenth +;/回车符/跳过"n"/回车符计数加/空格数加&& c<= '9' ) /数字字符加&&c<=z' )|(c>= 'A' && c <=

46、 'Z')/英文字符数加/计算中文字符数nCLenth = (Lenth-nEnLenth)/2-nEnterLenth;nTotalLenth = nCLenth + nEnLenth;CCountAllDlg dlg; /声明统计字数对话框类对象dlg.SetText(nTotalLenth,nCLenth,nELenth,nNLenth,nBLenth);dlg.DoModal();/ 显示对话框2.2.5 帮助关于 EasyTXT帮助菜单使用的是MFCH勺自定义窗口,在窗口中使用的是顶用类和对象的操作框, 详细代码如下所示:void CEasyTXTDlg:OnMenu

47、Help()CHelpDlg dlg;/声明帮助对话框类对象dlg.DoModal();/ 显示对话框帮助帮助提示为自定义窗口,其中textl使用的是事先写好的内容,并没有过多的使用函 数操作,但是由于帮助内容叙述详细,这里代码进行了相对的简略,简略的代码如下所 示:BOOL CHelpDlg:OnInitDialog()CDialog:OnInitDialog();/ TODO: Add extra initialization here/设置帮助内容CString str ="一 .程序功能简介 rn"str += "1.本程序是一个用来创建简单文档的基rn&

48、quot;str +="本的文本编辑器,支持查看或编辑文rn"str +="本(.txt )文件,其他支持的文件类型rn"str +="有cpp、h、c、html 和xml (以下仅对 rn"str += " txt进行说明)rn"(部分代码已经省略)str +="还原注册:取消注册,文本(.txt ) rn"str +="文件还原为默认图标,不能右键打开rn"str +="(部分功能重启或注销后方能生效)rn”;m_HelpText.SetWindowText(s

49、tr);/ 显示帮助内容2.2.6 高级关联注册建议文本编辑器的制作中有注册表关联的部分,这个部分使用的是系统自定义函数和一些注册表添加指令,在运行的过程中会用 massagebo加成一个提示窗口,提示是否 导入注册表以后,软件会在系统的关联列表中添加自己的关联,并且替换掉原有文本文档的编辑关联,在注册表中的三个相关位置写入键值,完成以后会提示保存,详细代码如下所示:void CEasyTXTDlg二OnMenuReg()int nChoice = MessageBox ("即将将此程序的信息写入系统注册表。rn确定要写 入口马?","程序注册",MB_

50、ICONWARNING|MB_YESNO);if (nChoice = IDYES)HKEY hresult;CString str1,str2;long value;LPCTSTR dataset1 = "txtfileshellOPEN" ;/ 打开方式子键LPCTSTR dataset2 = "txtfileshellOPENcommand" ;启用程序路径子键LPCTSTR dataset3Icon = "txtfileDefaultIcon" ;/ 关联图标子键/获得三个子键要设置的内容str1="用 EasyTX

51、T miniword 打开”;char buffModulPathMAX_PATH;GetModuleFileName(GetModuleHandle(NULL),buffModulPath,MAX_PATH);str2.Format( "%s",(LPCTSTR)buffModulPath);str2 = """ + str2 +"""CString str3 = str2;str2 += ""%1""CString CTextName = "EasyTXT.ex

52、e,10" ;/ 关联后显示你的图标for ( int nPathEnd = strlen(buffModulPath) - 1; nPathEnd >= 0; nPathEnd-)/获得程序路径if (buffModulPathnPathEnd= '' )buffModulPathnPathEnd+1= '0'strcat(buffModulPath,CTextName);break; str3.Format( "%s",(LPCTSTR)buffModulPath);DWORD dwPos;/ 创建 “ EasyTXTmi

53、niword应用程序”子键 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(hresult,NULL,0,REG_SZ,( const BYTE*)(LPCTSTR)str1,str1.GetLength();/ 创建 “comma

54、nd 子键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,( const BYTE*)(LPCTSTR)str2,str2.GetLength(); / 创建 Default 项。value=RegCr

55、eateKeyEx(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.GetLength();二RegCloseKey(hresult);MessageBox ("已将信息写

56、入注册表,系统重启后生效。","系统提示"); 还原注册注册的还原和注册原理是相同的,不同的是软件的还原注册是对注册表中已经添加 的键值进行删除操作,详细代码如下所示:void CEasyTXTDIg二OnMenuBackUp() int nChoice = MessageBox ("即将还原系统注册表。rn确定要还原吗?","还原 信息”,MB_ICONWARNING|MB_YESNO);CString str1,str2,str3;if (nChoice = IDYES)HKEY hresult;long value;LPCTSTR datasetl = "txtfileshellOPEN" ;/ 打开方式子键LPCTSTR dataset2 = "txtfileshellOPENcommand" ; / 启用程序路径子键LPCTSTR dataset3Icon = "txfileDefaultI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论