win32记事本实验报告Word文档格式.docx
《win32记事本实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《win32记事本实验报告Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
_________________________________________
评阅成绩:
___________评阅教师:
_____________
一、课程设计目标和要求
使学生综合使用所学过的汇编语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。
1.要求利用结构化程序设计方法以及汇编语言的编程思想来完成系统的设计;
2.要求有欢迎界面、菜单、文件操作,数据使用数组、结构体等均可,键盘操作或鼠标操作均可;
3.模块化程序设计:
要求在设计的过程中,按功能定义过程或宏,多个模块化设计可以用文件的形式来实现;
4.学生所选课题必须上机通过,并获得满意的结果;
5.程序书写风格:
锯齿型书写格式。
三、课程设计题目
Win32记事本
四、课程设计内容
1.设计环境
(1)硬件:
PC机。
(2)软件:
操作系统为WindowsXP,设计语言为WINDOWS汇编语言,集成实验环境可为MASMPlus、RadASM等32位汇编集成环境。
2.课题分析
Win32记事本,据题意,要用32位的汇编语言来编写。
运用32位汇编编译器,编译.asm文件,生成.obj和.exe文件,其中.exe文件为可运行文件,即生成的win32记事本软件,有清晰明确的图标,双击可直接运行。
记事本界面参考了windows自带的记事本,再加入个人特色。
3.需求分析
程序功能基本完成,用户界面友好,代码的可维护性和可扩展性较好。
能实现文本的录入,窗口的设计及实现,菜单栏设计及功能实现:
菜单栏主要包括文件、编辑、格式、查看、帮助常见菜单。
其中文件菜单有新建、打开、保存、另存为、退出等功能;
编辑菜单有剪切、复制、粘贴、全选,查找等功能;
格式菜单含有对文字字体、字型、字号及颜色等的设置功能;
查看状态栏、帮助等功能也相应实现。
4.总体设计
(1)设计思路
(2)流程图
5.各模块设计及其详细设计
本次课程设计涉及到多个子程序的设计,子程序之间也互相调用,在正式介绍子程序之前,先注释一下本课程设计所用到的一些结构体和常用的系统函数,以便后面代码分析。
(1)结构体(其中结构体成员只简单注释程序中应用到的)
Logfont:
lfFaceName字体名。
RECT:
left左上角x坐标;
top左上角y坐标;
right右下角x坐标;
bottom右下角y坐标。
MSG:
当前第一个字符的位置;
cpMax当前最后一个字符的后一个位置。
OPENFILENAME:
lStructSize该结构的大小;
指向图标的句柄;
Instance指向本模块实例的句柄;
cbSize指向窗口大小;
style指向窗口风格;
lpfnWndProc指向窗口过程地址。
(2)常用的系统函数
Sendmessage函数:
含有四个参数,第一个参数为要发送信息所依赖的模块实例,第二个为控件类型,第三个和第四个参数依赖于控件类型。
主要控件类型为EM_开头的控件。
MessageBox函数:
含有多个参数,第一个参数为所依赖的模块实例,第二个为消息盒子中所写的信息内容地址,第三个参数为消息盒子标题内容地址,第四个开始的参数为MB_开头的按钮控件,有确认,取消等,其中确认:
MB_OK为默认按钮。
介绍完一些结构体和常用的系统函数后,下面介绍本次课程设计用到的子程序。
其中子程序分为五大模块:
模块一被其他子程序调用的子程序,包含流操作子程序(_ProcStream)、检查文本有无改变子程序(_CheckModify)、设置菜单状态子程序(_SetStatus)、设置窗口标题子程序(_SetCaption)。
(为方便阅读,下文一致用子程序名代替,将不出现中文名注释)
①_ProcStream:
该子程序主要实现将文件读入写入缓存区,供文件打开子程序,文件保存子程序调用。
实现过程通过调用系统函数ReadFile将文件读入缓存区,调用系统函数WriteFile将文件写入缓存区。
②_CheckModify:
该子程序主要实现检查编辑区内的文本有无改变,用于退出记事本时判断是否保存文件。
实现过程通过调用SendMesssage函数发送消息,根据返回值判断文本是否发生改变,若改变,则调用MessageBox函数弹出是否保存消息确认框,点击yes按钮则保存,no为退出,取消则还原页面;
若未改变,则直接退出。
③_SetStatus:
该子程序主要实现设置菜单项的状态,菜单项的状态为两种,一种为可用,一种为不可用。
其中不可用的菜单也是根据编辑区中的内容来判断的,若编辑区无文本,则复制、剪切功能不可用,反之,则可用;
若剪切板无文本,则粘贴功能不可用,反之,则可用。
实现过程通过调用EnableMenuItem函数,其中最后一个参数为MF_开头的控件,用于控制该项菜单是否可用。
④_SetCaption:
该子程序主要实现设置标题栏文字。
在整个程序中,有很多地方要弹出对话框,标题栏文字起到了注释的作用。
实现通过调用SetWindowText函数,将文字传给窗口句柄。
模块二属于文件菜单项的子程序,包含文件打开子程序(_OpenFile)、文件保存子程序(_SaveFile)、文件另存为(_Saveas)、退出子程序(_Quit)。
①_OpenFile:
该子程序主要实现文件的打开。
实现过程通过定义局部变量@stOF为OPENFILENAME类型,用于存放要打开的文件的相关信息,如打开文件的格式,路径名等;
定义局部变量@stES为EDITSTREAM类型,用于读入缓冲区的字符流。
invokeGetOpenFileName,addr@stOF;
将定义的变量通过函数返回值送到eax中
.ifeax;
如果返回有值
invokeCreateFile,addrszFileName,GENERIC_READorGENERIC_WRITE,\
FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
;
调用CreateFile函数,addrszFileName取要打开文件名的地址,将该文件设置为可读可写,读可分享,文件必须存在,属性为默认属性,没有指定到文件的句柄。
.ifeax==INVALID_HANDLE_VALUE如果句柄值不合法
invokeMessageBox,,addrszErrOpenFile,NULL,MB_OKorMB_ICONSTOP;
弹出消息框提示“文件不存在”
ret;
返回
.endif
(省略部分代码)
mov@stES.pfnCallback,offset_ProcStream;
利用EDITSTREAM类型中pfnCallback这一成员传递_ProcStream子程序的地址。
实现子程序的调用。
②_SaveFile③_Saveas:
该两个程序都实现保存功能,所以放在一起介绍。
文件保存子程序中调用了文件另存为子程序,因为实现过程放在另存为子程序中。
实现过程与_OpenFile子程序类似,都是定义了相关结构体的变量,只是将读入流改为了写入流。
流程图:
④_Quit:
该程序实现了退出记事本的功能。
invoke_CheckModify;
先判断编辑区文本是否改变。
.ifeax;
若返回值为真。
invokeDestroyWindow,;
则关闭该窗口及子窗口。
模块三属于编辑菜单项的子程序,包含查找对话框初始化子程序(_Init)、查找子程序(_FindText)、替换子程序(_ReplaceText)、替换全部子程序(_ReplaceAll)。
①_Init:
利用charformat结构体中的IStructSize成员初始化对话框。
进行相关成员变量的赋值后。
invokeRegisterWindowMessage,addrFINDMSGSTRING;
注册自定义消息,返回消息ID
movidFindMessage,eax
invokeCreateWindowEx,WS_EX_CLIENTEDGE,offsetszClassEdit,NULL,\
WS_CHILDORWS_VISIBLEORWS_VSCROLLORWS_HSCROLL\
ORES_MULTILINEorES_NOHIDESEL,\\,0,
②_FindText:
该子程序实现了查找文本的功能。
利用FINDTEXTEX结构体,char.cpMax和char.cpMin设置查找范围,lpstrText设置查找内容。
invokeSendMessage,)和窗口组件添加子程序(_ProcWinMain)
①_WinMain:
该子程序实现了构建窗口的功能。
实现通过利用WNDCLASSEX结构体中成员存放窗口的属性,如hCursor存放光标的句柄,;
指定基于这个类建立的窗口的过程地址。
invokeCreateWindowEx,NULL,offsetszClassName,offsetszCaptionMain,\
WS_OVERLAPPEDWINDOW,\400,\NULL,,SW_SHOWNORMAL;
显示并激活窗口,恢复正常大小。
invokeUpdateWindow,;
刷新窗口客户区。
invoke@stMsg
;
调用TranslateAccelerator翻译快捷键。
②_ProcWinMain:
该过程实现了建立菜单和文本区联系的功能。
窗口过程是窗口的核心部分,其中WM_COMMAND是实现所有命令的基础,它联系着菜单项与文本编辑区。
在WM_COMMAND中,使得菜单和相应命令一一对应,这主要是通过if-elseif-else-endif语句实现多分枝,通过子程序的调用实现相应的操作。
除新建外,其他功能都调用了相应的子程序,如_OpenFile等;
或者调用系统函数SendMessage,用控件控制功能,如复制功能则实现如下:
invokeSendMessage,casemap:
none
;
>
Include文件定义
includewindows.inc
includegdi32.inc
includelibgdi32.lib
includeuser32.inc
includelibuser32.lib
includekernel32.i