文本编辑器课程设计报告文档格式.docx
- 文档编号:16229515
- 上传时间:2022-11-21
- 格式:DOCX
- 页数:27
- 大小:185.54KB
文本编辑器课程设计报告文档格式.docx
《文本编辑器课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《文本编辑器课程设计报告文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
输出形式:
对编辑框中尚无文本内容时进行查找、替换、统计等,程序会弹出一个提示尚无文本信息的小对话框,需输入文本后再进行以上操作。
对编辑框中已有文本内容后进行查找、替换、统计操作,程序将弹出与之对应的对话框,根据所弹出的对话框的按键要求进行之后的操作就可以。
保存文件,另存为等功能都异曲同工,撤销、删除、剪切、复制、粘贴、等就直接在主文本编辑框中操作,直接在其显示操作后的文本信息。
测试数据要求:
任意一文本文件。
3、概要设计
(1)抽象数据类型:
直接运用windows中的的窗口类,通过消息响应,调用API函数实现有关对话框的操作功能,以及自己定义一个仅含有成员函数的普通类对文本字符进行查找、替换、统计的辅助操作,对主对话框和副对话框中函数的回调和参数的回显功能。
(2)主程序流程图
文本编辑器
文件
编辑
工具
帮助
新建
打开
保存
另存
退出
复制
粘贴
剪切
清空
删除
撤销
查找
替换
统计
全选
背景音乐
关于
连接XX
连接114
(3)模块调用关系:
该文本编辑器函数括:
WINAPIMain_Proc(),WINAPIChange_Proc(),WINAPIFind_Proc(),WINAPITotal_Proc(),Main_OnInitDialog();
Change_OnInitDialog();
Find_OnInitDialog();
Total_OnInitDialog();
Main_OnCommand();
Change_OnCommand();
Find_OnCommand();
Total_OnCommand(),Main_OnClose(),Change_Main_OnClose();
Find__OnClose();
Total_OnClose();
Main_OnSize(),TCHAR*temp(),D_change()等函数;
其中每个对话框对应一组函数例如主对话框包括WINAPIMain_Proc(),Main_OnInitDialog(),Main_OnCommand(),Main_OnClose()函数,Main_Proc()函数通过消息响应调用Main_OnInitDialog()完成对话框的初始化,通过调用Main_OnCommand()函数完成对对话框中控件以其菜单项的响应,通过调用Main_OnClose()关闭对话框。
其它的如查找,替换等副窗口也一样。
TCHAR*temp(),函数做回调函数用,返回副对话框中已经改变后的主对话框文本框中的文本内容。
D_change()是实现替换功能的函数
其函数调用关系如下:
Main_Proc(),
Main_OnInitDialog()
Main_OnCommand()
Change_Proc()
Find_Proc()
Total_Proc()
四、详细设计
〔1〕、文件操作:
1、文件的新建的实现:
intret=MessageBox(NULL,TEXT("
是否把更改保存到新建的文本文档!
!
"
),TEXT("
温馨提示"
),MB_YESNO|MB_ICONQUESTION);
if(ret==IDYES)//根据选择如果保存
{
OPENFILENAMEofn;
//文件对象
charszFile[MAX_PATH];
//文件的大小,最大
ZeroMemory(&
ofn,sizeof(ofn));
//文件的初始化
ofn.lStructSize=sizeof(ofn);
ofn.lpstrFile=szFile;
ofn.lpstrFile[0]=TEXT('
\0'
);
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFilter=TEXT("
ALL\0*.*\0Text\0*.TXT\0C++\0*.cpp\0"
//保存的文件类型
ofn.nFilterIndex=1;
ofn.lpstrFileTitle=NULL;
ofn.nMaxFileTitle=0;
ofn.lpstrInitialDir=NULL;
ofn.hwndOwner=hwnd;
ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
ofn.lpstrTitle=TEXT("
保存"
if(GetSaveFileName(&
ofn))
{
FILE*fp;
fp=fopen(szFile,"
w"
//打开文件
if(fp==NULL)
{
MessageBox(NULL,TEXT("
文件无法保存"
呜呜"
),MB_OK);
}
TCHARstr[10000];
TCHARend[10000];
memset(end,0,10000);
GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));
fputs(str,fp);
fclose(fp);
}
SetDlgItemText(hwnd,IDC_EDIT1,"
}
else
2、文件打开的实现:
caseID_MENUITEMOPEN:
//文本的打开
{
OPENFILENAMEofn;
charszFile[MAX_PATH];
//保存路径变量
ZeroMemory(&
在这里我们使用ZeroMemory“函数”,ZeroMemory其实并不是函数,看一下ZeroMemory的定义:
ofn.lStructSize=sizeof(ofn);
ofn.lpstrFile=szFile;
//szFile是一个字符数组,那么szFile这个名字就代表这个字符数组的首地址
这是一个指针的应用,把接收选择文件名的数组的地址传递到GetOpenFileName函数中。
ofn.lpstrFile[0]=TEXT('
ofn.lpstrFile[0]=TEXT('
效果等价于ZeroMemory(szFile,sizeof(szFile)/sizeof(char));
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFilter=TEXT("
ALL\0*.*\0Text\0*.txt\0"
文件过滤器
*.*就表示所有文件
*.txt就表示所有文本文件
abc*.*就表示所有以abc开头的文件
abc*.txt就表示所有以abc开头的文本文件(txt)
ofn.lpstrFilter=TEXT("
ALL\0*.*\0Text\0*.TXT\0"
用“\0”分割出几个段,每两段是一组过滤器,每组的第一个段代表过滤器的显示的值,而第二段表示真正的过滤器
ofn.nFilterIndex=1;
//选择一个过滤器
ofn.lpstrFileTitle=NULL;
windows的一个惯例:
结构体的指针类型别名一般是LP+结构体的名字
GetOpenFileName(&
ofn)而不是GetOpenFileName(ofn),因为GetOpenFileName函数要的是OPENFILENAME的指针
(8)只要用户还没关闭对话框,那么GetOpenFileName函数是停住的,同步模式的PlaySound以及getchar、scanf是一样的。
用户关闭对话框,GetOpenFileName函数返回,返回值是BOOL,等于TRUE表示用户选择了文件,如果等于FALSE就表示用户选择了【取消】按钮
ofn.nMaxFileTitle=0;
ofn.lpstrInitialDir=NULL;
ofn.hwndOwner=hwnd;
ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
if(GetOpenFileName(&
FILE*fp;
fp=fopen(szFile,"
r"
if(fp==NULL)
MessageBox(NULL,TEXT("
文件打开错误!
记事本"
TCHARline[256];
TCHARend[10000];
memset(line,0,256);
memset(end,0,256);
while(!
feof(fp))
fgets(line,sizeof(line),fp);
lstrcat(end,line);
intw=strlen(end);
end[w-1]='
;
lstrcat(end,"
\r\n"
SetDlgItemText(hwnd,IDC_RICHEDIT1,end);
fclose(fp);
//关闭文件
break;
}
break;
3、文件保存的实现:
caseID_MENUITEMSAVE:
//文本的保存
{
OPENFILENAMEofnb;
charbcFile[MAX_PATH];
ofnb,sizeof(ofnb));
ofnb.lStructSize=sizeof(ofnb);
ofnb.lpstrFile=bcFile;
ofnb.lpstrFile[0]=TEXT('
ofnb.nMaxFile=sizeof(bcFile);
ofnb.lpstrFilter=TEXT("
ofnb.nFilterIndex=1;
ofnb.lpstrFileTitle=NULL;
ofnb.nMaxFileTitle=0;
ofnb.lpstrInitialDir=NULL;
ofnb.hwndOwner=hwnd;
ofnb.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST|OFN_OVERWRITEPROMPT;
if(GetSaveFileName(&
ofnb))
FILE*fp=fopen("
.txt"
"
//保存所有文件都为txt格式
TCHARbaoc[100000];
//保存的最大容量为100000
GetDlgItemText(hwnd,IDC_RICHEDIT1,baoc,sizeof(baoc));
fputs(baoc,fp);
3、退出文本编辑器的实现:
intret=MessageBox(NULL,TEXT("
if(ret==IDYES)
{
OPENFILENAMEofn;
charszFile[MAX_PATH];
ZeroMemory(&
ofn.lStructSize=sizeof(ofn);
ofn.lpstrFile=szFile;
ofn.nMaxFile=sizeof(szFile);
ofn.lpstrFilter=TEXT("
ofn.nFilterIndex=1;
ofn.lpstrFileTitle=NULL;
ofn.nMaxFileTitle=0;
ofn.lpstrInitialDir=NULL;
ofn.hwndOwner=hwnd;
ofn.Flags=OFN_EXPLORER|OFN_PATHMUSTEXIST|OFN_FILEMUSTEXIST;
ofn.lpstrTitle=TEXT("
if(GetSaveFileName(&
FILE*fp;
fp=fopen(szFile,"
if(fp==NULL)
MessageBox(NULL,TEXT("
TCHARstr[10000];
TCHARend[10000];
memset(end,0,10000);
GetDlgItemText(hwnd,IDC_EDIT1,str,sizeof(str));
fputs(str,fp);
fclose(fp);
MessageBox(NULL,TEXT("
文件保存成功!
放心关闭!
嘻嘻"
}
EndDialog(hwnd,0);
〔2〕、编辑操作:
1、剪切的实现:
caseID_MENUITEMCUT:
//剪切
{SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_CUT,0,0);
//传递对话框中的内容首先获取RichEdit中的内容,WM_CUT,传递要进行操作的内容,0,0为两个WPARAM和LPARAM是约定的消息参数类型。
2、复制的实现:
caseID_MENUITEMCOPY:
//复制
{SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_COPY,0,0);
//传递对话框中的内容首先获取RichEdit中的内容,WM_COPY,,传递要进行操作的内容,0,0为两个WPARAM和LPARAM是约定的消息参数类型。
3、粘贴的实现:
caseID_MENUITEMPASTE:
//粘贴
{SendDlgItemMessage(hwnd,IDC_RICHEDIT1,WM_PASTE,0,0);
4、清除的实现:
caseID_MENUITEMEMPTY:
//清除
SetDlgItemText(hwnd,IDC_RICHEDIT1,"
5、撤销的实现:
caseID_MENUITEMUNDO:
//“撤销”菜单
SendDlgItemMessage(hwnd,IDC_RICHEDIT1,EM_UNDO,0,0);
6、删除的实现:
caseID_MENUITEMDELETE:
//删除
SendMessage(GetDlgItem(hwnd,IDC_RICHEDIT1),WM_CLEAR,0,0);
7、全选的实现:
caseID_MENUITEMSELECTALL:
//全选
SendMessage(GetDlgItem(hwnd,IDC_RICHEDIT1),EM_SETSEL,0,-1);
8、系统时间的实现:
VOIDCALLBACKMyTimerFun(HWNDhwnd,UINTmessage,UINTiTimerID,DWORDdwTime)
{
SYSTEMTIMEstrLocal;
//当前时间
GetLocalTime(&
strLocal);
TCHARstr[256];
wsprintf(str,"
%04d-%02d-%02d%02d:
%02d:
%02d"
strLocal.wYear,strLocal.wMonth,
strLocal.wDay,strLocal.wHour,strLocal.wMinute,strLocal.wSecond);
SetDlgItemText(hwnd,IDC_EDIT2,str);
}
9、查找功能的实现:
intcount=0;
intLine_count=1;
intRow_count=1;
intnum=0;
intflag=0;
TCHARstr1[256];
TCHARtemp1[5000];
TCHARtemp2[5000];
memset(temp1,0,5000);
memset(temp2,0,5000);
memset(str1,0,256);
GetDlgItemText(hwnd,IDC_EDIT_FINDWORD,str1,sizeof(str1));
if(strlen(str1)==0)
查找的内容为空,请输入内容后再查找!
inti=0;
intj=0;
while(str2[i]!
='
)
if((str2[i]=='
\n'
)||(Row_count==63))
Line_count++;
Row_count=0;
if(str2[i]==str1[j])
{
i++;
j++;
Row_count++;
if(str1[j]==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 文本 编辑器 课程设计 报告