C++课程设计报告(简易文本编辑器)

更新时间:2023-06-09 04:33:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C++编译的文本编辑器

面向对象程序设计课程设计报告

(2011/2012学年第二学期)

题目名称 简单文本编辑器的设计 系 部 专 业 计算机科学与技术 班 级 学 生 完成时间 2012年 6 月

指导老师

C++编译的文本编辑器

引 言

在文本编辑器出现前,人们用打孔机把计算机文字打到穿孔卡片上。文字存放于一个装着这样的薄卡片的盒子里,可以用读卡器来阅读它。

第一个文本编辑器是一种行编辑器,它运行在打字机型的终端上,这种编辑器并不具备在窗口和屏幕中显示的功能。它包含了一些非常短的命令(为了减少打字量)。其中一个命令能够把文件的指定部分通过打字机打印出来。编辑光标是想象中的一个插入点,通过特殊命令,可以把它移动到特定内容字符串所在的行。随后,内容字符串又被扩展成正则表达式。如果想看到文件的变化,你需要把它打印出来。相对于穿孔机来说,人们认为这种基于行的文本编辑器具有革命性的进步。如果没有它,用户就需要把那些处理文本的命令打成专用的卡片,并在编辑文件时使用这些卡片。

当带有显示屏的计算机终端出现后,基于显示屏的文本编辑器开始流行起来。最早的全屏编辑器中,有一种叫做O26,它是于1967年为CDC 6000系列机器的操作控制台而作的。另外一个早期的全屏编辑器是vi。vi诞生于20世纪70年代,至今,它仍是Unix和Linux的标准编辑器。全屏编辑器对视频终端的销售起到了促进的作用。

文本编辑器在Windows的应用中是一个非常重要的项目,在过去十数年中,微软对windows文本编辑器有多个版本的升级改进,而基于其他的编程环境的文本编辑器也是多如牛毛,今天我们用MFC可视化编译环境做一个简易的文本编辑器。

C++编译的文本编辑器

目 录

引 言 ............................................ 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

C++编译的文本编辑器

1.课程设计目的和意义

《面向对象程序设计》课程设计是实践性教学环节之一,是《面向对象程序设计》课程的辅助教学课程。该课程设计要求学生综合运用在《面向对象程序设计》课程中学到的面向对象技术与实际编程相结合,独立完成一项较为完整、并具有一定实际功能的课程设计任务,同时加深学生对面向对象和C++编程技术的理解和掌握,培养实际的应用程序开发能力。在课程设计过程中,使学生养成良好的程序设计风格,并掌握C++应用程序的设计开发过程和编程方法、测试方法

2.详细设计

2.1需求描述

简单文本编辑器的设计是基于Microsoft Visual Studio 2008开发的一款小型的软件,主要的设计是为了满足普通用户对文本文档进行一般的简单操作,通过MFC可视化编程环境,直接生成一个友好的用户操作界面,通过这个窗口,用户可以对文本进行如下的基本操作。 2.1.1 文件

① 新建:创建一篇空白文档,从“工具栏”或“文件下拉菜单”中创建

② 打开:打开文本(.txt)文件,从“工具栏”或“文件下拉菜单”中打开;或将文本(.txt)文件拖入程序界面打开或应用程序图标上打开;或右键单击文本文件,在“打开方式”中选择本程序打开

② 保存:保存文档,从“工具栏”或“文件下拉菜单”中打开

④ 另存为:保存文件副本,在不同位置或以不同文件名保存文档,从“工具栏”或“文件下拉菜单”中另存 2.1.2 编辑

① 撤销:撤销前一步所进行的操作,从“编辑下拉菜单”或“右键菜单”中撤销 ③ 删除:删除当前选定字符(串),从“编辑下拉菜单”或“右键菜单”中删除 ④ 剪切:复制并删除选定字符(串),从“编辑下拉菜单”或“右键菜单”中剪切 ⑤ 复制:复制选定字符(串),“编辑下拉菜单”或“右键菜单”中复制 ⑥ 粘贴:对粘贴内容进行粘贴,从“编辑下拉菜单”或“右键菜单”中粘贴 ⑦ 全选:对文本编辑框中文本全部选定,从“编辑下拉菜单”或“右键菜单”中全

C++编译的文本编辑器

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进行控制的,代码中使用的是图形至于文本输入的下方并设置为透明,在下面的文本编辑区下层有一张写有内容的图片作为装饰,换行等动作惠济路插入符位置并按照坐标进

C++编译的文本编辑器

行绘制,文本框的大小改变等会导致文本编辑区的重绘,所以在改变文本框时必须调用函数对文本框中的内容进行保存,相关代码如下所示: BOOL CBmpEdit::OnEraseBkgnd(CDC* pDC) { }

void CBmpEdit::OnChange() { }

HBRUSH CBmpEdit::CtlColor(CDC* pDC, UINT nCtlColor) { }

void CBmpEdit::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar * pScrollBar) { }

void CBmpEdit::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) {

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);

//伸展铺上图片

Invalidate(); //刷新用户界面

pDC->SetBkMode(TRANSPARENT); //设置文字背景透明 return NULL;

CEdit::OnVScroll(nSBCode, nPos, pScrollBar); //判断滚动条是否滑动 Invalidate(); //刷新用户界面

int n1,n2;

C++编译的文本编辑器

}

CEdit::OnKeyDown(nChar, nRepCnt, nFlags); n2 = GetScrollPos (SB_VERT); if (n1 != n2) //判断滚动条是否滑动 { }

Invalidate(); //刷新用户界面

BOOL CBmpEdit::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt) { }

2.2.2 文件

新建

BOOL editS = CEdit::OnMouseWheel(nFlags, zDelta, pt); Invalidate(); //刷新用户界面 return editS;

新建菜单使用的是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); //弹出消息对话框询问

;

C++编译的文本编辑器

}

{ }

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 for (i=0;i<nFileCount;i++) {

UINT nChars=::DragQueryFile (hDropInfo,i,&lpszFileName[0],512); CString str(&lpszFileName[0],nChars); //获得文件路径//打开前对现有文isModified = m_Edit.GetModify();//获取文本修改标记 CString string;

m_Edit.GetWindowText(string);

if (isNew && string.IsEmpty())//若是新建文本且文本无内容内容 { }

else if(isModified) //如果文本已被修改,分情况讨论

(hDropInfo,0xFFFFFFFF,NULL,512);

本的的处理

;

C++编译的文本编辑器

}

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 == { } else {

MessageBox ("不支持的文件类型!","打开错误");

int Choice = MessageBox("当前文本已被修改,想保存吗?","系统提示", MB_YESNO|MB_ICONQUESTION); //弹出消息对话框询问 if(Choice==IDYES) //选择“是” { }

OnMenuSave();//调用保存函数保存文件

"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 read[50000];

file.Read(read,50000); //读取文件内容 for(unsigned i=0;i<file.GetLength();i++) {

strText += read[i]; //把文件内容赋值给CString变量

}

拖入打开

file.Close();//关闭文件 m_Edit.SetWindowText(strText); isNew = FALSE; //标记为打开文本

m_Edit.SetModify(FALSE); //文本修改标记设为修改

C++编译的文本编辑器

}

}

::DragFinish (hDropInfo); //释放内存 i=0;

delete []lpszFileName;

void CEasyTXTDlg::OpenFile() {

CString strCmdLine = GetCommandLine(); int totalLen = strCmdLine.GetLength(); int i = 0;

int index = 0;//循环统计字符个数

for (i = 0,index = 0; i < 3; i++,index ++) { }

if (index != 0) {

for (i = index;i < totalLen - 1;i ++)

SavePath += 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 == {

CString strText;

CFile file(SavePath,CFile::modeReadWrite); //以读与写方式打开文件 char read[50000];

file.Read(read,50000); //读取文件内容 for(unsigned i=0;i<file.GetLength();i++) {

strText += read[i];//把文件内容赋值给CString变量

index = strCmdLine.Find("\"", index); //查找字符串

"cpp" || stl == "CPP"

|| stl == "h" || stl == "H" || stl == "xml" || stl == "XML" || stl

== "html" || stl == "HTML")

}

C++编译的文本编辑器

}

}

}

m_Edit.SetWindowText(strText); //在编辑框中显示文件内容 m_Edit.SetModify(FALSE); //文本修改标记设为未修改 isNew = FALSE; Invalidate();

else { }

MessageBox ("不支持的文件类型!","打开错误"); m_Edit.SetModify(FALSE); //文本修改标记设为未修改 isNew = TRUE;

else { }

m_Edit.SetSel(0,0);

m_Edit.SetModify(FALSE); //文本修改标记设为未修改 isNew = TRUE;

保存

保存使用的是MFC中自带的模块进行的,第一次的保存即为另存为,当文档已经创建以后,文本的保存就改变为把文本编辑区的内容重新写入同一个绝对地址的文本文档中,其中声明和调用的详细代码如下: void CEasyTXTDlg::OnMenuSave() {

if (isNew) //对新建且未保存的文本调用“另存为”进行保存

{ }

else //对打开的文件修改后进行保存 {

CString strText=""; char write[50000];

OnMenuSaveas();//新建文本已保存

C++编译的文本编辑器

}

}

m_Edit.GetWindowText(strText); //获取编辑框中的内容 strcpy(write,strText); //将编辑框中的内容赋值给字符串数组 file.Write(write,strText.GetLength());//把编辑框中的内容写入文件 file.Close(); //关闭文件

m_Edit.SetModify(FALSE); //设置修改标记为未修改

读与写方式创建文件

m_Edit.SetSel(0,0);

另存为

另存为是一种特殊的保存形式,另存为在应用的时候是用户用过FILE等函数寻找一个绝对地址并按照现有格式进行保存,在今后的另存为命令中,不会对相同绝对地址相同文件名的文件进行保存,而是在弹出消息对话框用户确认覆盖操作以后才将原有的文件进行删除操作然后把新内容的文件生成在用户选定的绝对地址下,详细代码如下: void CEasyTXTDlg::OnMenuSaveas() {

CFileStatus fs; //文件存在状态

CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,

"All Files(*.txt)|*.txt||",AfxGetMainWnd()); //构造“文件另存为”

对话框

CString strPath,strText=""; char write[50000];

if(dlg.DoModal() == IDOK) //判断按下“另存为” {

strPath = dlg.GetPathName(); //获取文件另存为路径 if(strPath.Right(4) != ".txt") { }

if(CFile::GetStatus(_T(strPath),fs)) {

CString info = strPath;

info += " 已存在。要替换它吗?";

strPath += ".txt"; //设置文件扩展名为txt

//如果文件存在

C++编译的文本编辑器

if (nChoice == IDYES)

CFile file(_T(strPath),CFile::modeCreate|CFile::modeWrite); m_Edit.GetWindowText(strText); strcpy(write,strText); } else {

SavePath = strPath; //获取保存新建文本的路径

CFile file(_T(strPath),CFile::modeCreate|CFile::modeWrite); //以m_Edit.GetWindowText(strText); strcpy(write,strText);

//获取编辑框中的内容

//将编辑框中的内容赋值

//把编辑框中的内容

//如果文件不存在

} else { }

OnMenuSaveas();

//弹出另存对话框

//不替换

//获取编辑框中的内容

//把编辑框中的内容

//以

{

SavePath = strPath;

//获取保存新建文本的路径

//如

弹出确认替换消息 果确认替换

只写方式创建文件

//将编辑框中的内容赋值给字符串数组

file.Write(write,strText.GetLength()); file.Close(); isNew = FALSE;

m_Edit.SetModify(FALSE);

写入文件

//关闭文件

只写方式创建文件

给字符串数组

file.Write(write,strText.GetLength()); file.Close(); isNew = FALSE;

m_Edit.SetModify(FALSE);

写入文件

C++编译的文本编辑器

}

}

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 && string.IsEmpty()) { }

else if(isModified) {

CDialog::OnClose();

//获取文本修改标记

//若是新建文本且文本无内容内容

//退出程序

//如果文本已被修改,分情况讨论

int QuitChoice = MessageBox("当前文本已被修改,想保存吗?","系统提示

{ }

else if(QuitChoice==IDNO) { } else {

return;

//选择“取消”时不退出

MB_YESNOCANCEL|MB_ICONQUESTION);

//弹出消息对话框询问

if(QuitChoice==IDYES)

OnMenuSave();

//选择“是”

//调用保存函数保存文件 //退出程序

//选择“否”

if (isModified = FALSE)

CDialog::OnClose();

CDialog::OnClose(); //退出程序

C++编译的文本编辑器

}

}

else {

CDialog::OnClose(); }

//如果文本未被修改则直接退出程序

2.2.3 编辑

撤销

撤销命令是系统自带的函数,使用是调用OnMenuUndo函数命令,详细代码如下所示: void CEasyTXTDlg::OnMenuUndo() { }

删除

m_Edit.Undo(); //撤销上一次的编辑框中的操作(单级撤销)

删除命令调用的是系统自带函数,使用的是OnMenuDelete函数命令,详细代码如下

所示:

void CEasyTXTDlg::OnMenuDelete() { }

剪切

m_Edit.Clear(); //删除编辑框中当前选中的文本

剪切命令调用的是系统自带函数,使用的是OnMenueCut函数命令,详细代码如下所

示:

void CEasyTXTDlg::OnMenuCut() { }

复制

m_Edit.Cut(); //删除编辑控件中当前选中的文本,并将删除的文本拷贝到

剪贴板中

复制命令调用的是系统自带函数,使用的是OnMenuCopy函数命令,详细代码如下所

C++编译的文本编辑器

示:

void CEasyTXTDlg::OnMenuCopy() { }

粘贴

m_Edit.Copy(); //将编辑框中的当前选中文本拷贝到剪贴板中

粘贴命令调用的是系统自带函数,使用的是OnMenuPaste函数命令,详细代码如下所

示:

void CEasyTXTDlg::OnMenuPaste() { }

全选

m_Edit.Paste(); //在当前光标位置插入剪贴板内的文本

全选命令调用的是系统自带函数,使用的是OnMenuSelectAll函数命令,详细代码如下所示:

void CEasyTXTDlg::OnMenuSelectAll() { }

2.2.4 应用

查找/替换

m_Edit.SetSel(0, -1);//全部选中文本内容

查找和替换命令使用的是串查询,按照匹配的媳妇筛选,如果替换,则在替换时判

断是否为第一次的替换,替换时将记录字符串的位置并加以标记,按后进行替换,详细代码如下所示:

void CEasyTXTDlg::OnMenuFindReplace() {

nindex = 0; degree = FALSE; index = 0;

dlg = new CFindReplaceDialog; dlg->Create(FALSE,NULL);

//声明“查找/替换”对话框指针

//创建“替换”对话框

C++编译的文本编辑器

dlg->ShowWindow(SW_SHOW); //显示“替换”对话框

long CEasyTXTDlg::OnFindReplace(WPARAM wParam, LPARAM lParam)

{ CString strText,repText;

strText = dlg->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 =0;

m_Edit.SetModify(TRUE);

记设为修改

m_Edit.SetSel(0,-1); CRect rect (15,80,586,686); InvalidateRect(rect);

}

if(dlg->ReplaceCurrent())

find = FALSE;

else

//声明字符串变量

//获得查找字

//声明字符串变量

//获得编辑框

//判断是否全

//获得查找字 //获得替换字

//获得替换字

//使用替换字符串替

//将替换后的字符串

//设置查找位置为初始

//文本修改标

//刷新界面

//替换

//进行替换

C++编译的文本编辑器

find = TRUE;

变量

if(find)

换 { len = strText.GetLength();

串的长度

} else { CString left,right;

int num = 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 = left + repText + right; m_Edit.SetWindowText(str);

的字符串

m_Edit.SetModify(TRUE);

//进行查找/声明整型

//判断是查找还是替

//获得要查找字符

//声明字符串变量

//获得查找字

//获得编辑框中文

//判断为第一次替换

//获得查找字符串在编辑

//获得替换字符串左

//获得替换字符串

//获得替换字符串 //获得替换字符串长 //组合成新的字符串 //在编辑框中显示新

//文本修改标记设

C++编译的文本编辑器

为修改 本 }

字体设置

}

strText = dlg->GetFindString(); m_Edit.GetWindowText(str);

//获得查找字符串 //获得编辑框中是文

index = str.Find (strText,nindex); //获得查找字符串在编辑

//选中查找或替换

框文本中的位置

m_Edit.SetSel(index,index+strText.GetLength()); nindex = index+len; if (index >= 0) { } else { }

m_Edit.SetFocus();

//编辑框获得焦点 //刷新界面

CRect rect1 (15,80,586,686); InvalidateRect(rect1); return 0;

degree = FALSE; nindex = 0; degree = TRUE;

的字符串

//设置起始查找位置

void 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)

//获取字体信息 //初始化字体信息

C++编译的文本编辑器

m_Font.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 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;i<Lenth;i++) {

char c = strText.GetAt(i);

//设置字体

//获取编辑框文本

//声明统计字符串对话框类对象

//显示对话框

//总共字数 //中文 //英文 //数字 //空格 //半角字符 //回车

//获取当前字符中文字符

C++编译的文本编辑器

}

{ }

if(c == '\r') { } else { }

nEnLenth ++; if (c == ' ')

nBLenth ++; nNLenth ++; nELenth ++;

//英文字符数加

//空格数加

i ++;

//跳过"\n"

//回车符计数加

nEnterLenth ++;

//回车符

continue;//英文字符 else

else if (c>='0' && c<='9') //数字字符加 else if ((c>='a'&&c<='z')||(c>='A' && c <= 'Z'))

} //计算中文字符数

nCLenth = (Lenth-nEnLenth)/2-nEnterLenth; nTotalLenth = nCLenth + nEnLenth;

CCountAllDlg dlg; //声明统计字数对话框类对象

dlg.SetText(nTotalLenth,nCLenth,nELenth,nNLenth,nBLenth); dlg.DoModal();

//显示对话框

2.2.5 帮助

关于EasyTXT

帮助菜单使用的是MFC中的自定义窗口,在窗口中使用的是顶用类和对象的操作框,

详细代码如下所示:

void CEasyTXTDlg::OnMenuHelp() {

本文来源:https://www.bwwdw.com/article/0221.html

Top