汇编语言课程设计win32编写记事本.docx
- 文档编号:10340198
- 上传时间:2023-05-25
- 格式:DOCX
- 页数:32
- 大小:37.56KB
汇编语言课程设计win32编写记事本.docx
《汇编语言课程设计win32编写记事本.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计win32编写记事本.docx(32页珍藏版)》请在冰点文库上搜索。
汇编语言课程设计win32编写记事本
华北科技学院
课程设计说明书
课程名称:
汇编语言
班级:
计算机B08-1姓名:
_李鹏飞___
学号:
__4231__
设计题目:
___win32编写记事本___
设计时间:
_6月23日_至_7月1日__
指导教师:
_____杜杏菁_________________
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
_____
一、课程设计目的
进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二、课程设计要求
1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。
2.遵循模块化、结构化的程序设计方法。
3.要求程序必须正确。
4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。
5.要求程序结构合理,语句使用得当。
6.适当追求编程技巧和程序运行效率。
三、课程设计题目:
win32编写记事本
四、课题分析
WINDOW记事本的编写,要求能实现基本菜单框架并打开窗口,有能力的同学可以编写进行数据录入并保存的代码
五、流程图:
六、程序源代码:
.386
.modelflat,stdcall
optioncasemap:
none
include
include
includelib
include
includelib
include
includelib
include
includelib
include
includelib
ICO_MAINEQU1000h;图标
IDM_MAINEQU2000h;菜单
IDA_MAINEQU2000h;加速键
IDM_NEWEQU2101h;新建
IDM_OPENEQU2102h;打开
IDM_SAVEEQU2103h;保存
IDM_SAVEASEQU2104h;另存为
IDM_EXITEQU2105h;退出
IDM_UNDOEQU2201h;撤销
IDM_CUTEQU2203h;剪切
IDM_COPYEQU2204h;复制
IDM_PASTEEQU2205h;粘贴
IDM_DELETEEQU2206h;删除
IDM_FINDEQU2207h;查找
IDM_REPLACEEQU220Ah;替换
IDM_SELECTALLEQU220Bh;全选
IDM_FONTEQU2301h;字体
IDM_STATUSBAREQU2401h;状态栏
IDM_HELPEQU2501h;帮助主题
IDM_ABOUTEQU2502h;关于
IDM_MENUHELPEQU2601h;菜单信息
.data
hInstancedd
hWinMaindd
hMenudd
hWinStatusdd
hWinEditdd
hFiledd
hFindDialogdd
hRichEditdd
dwFontColordd
idFindMessagedd
stFindFINDREPLACE<>
szFindTextdb100dup()
szReplaceTextdb100dup()
szFileNamedbMAX_PATHdup()
stLogFontLOGFONT<>
dwOptiondd
.data
F_STATUSBARequ00000001h
dllEditdb"",0
errTitledb"错误",0
noRichEditdb"无法找到"
classNamedb"TextEditor",0
captionMaindb"文本编辑器",0
classEditdb"RichEdit20A",0
fontFacedb"Fixedsys",0
modifydb"你已经改动过啦,要不要存一下",0
filterdb"文本文件(*.txt)",0,"*.txt",0,"所有文件",0,"*.*",0,0
defExtdb"txt",0
titleFormatdb"%s-我的记事本",0
errCreateFiledb"咦!
出现问题了!
",0
errOpenFiledb"咦!
怎么打不开!
",0
notFounddb"不给力啊,找不到!
",0
noNamedb"还没起名字",0
timeFormatdb"%02d:
%02d:
%02d",0
charsFormatdb"字节数:
%d",0
lineFormatdb"行:
%d",0
colFormatdb"列:
%d",0
helpTitledb"帮助",0
helpTextdb"Sorry!
无法提供任何帮助",0
aboutTitledb"关于记事本",0
aboutTextdb"我的记事本",0ah,0dh,"作者:
李鹏飞",0ah,0dh,"2010年07月01日",0ah,0dh,0
dwStatusWidthdd100,200,300,400,-1
dwMenuHelpdd0,IDM_MENUHELP,0,0
FINDMSGSTRINGdb"commdlg_FindReplace",0
.code
;====================================================================================================
_CheckModifyStatePROC
invokeSendMessage,hWinEdit,EM_GETMODIFY,0,0;获取控件内容是否改变的信息
.ifeax!
=0
invokeMessageBox,hWinMain,addrmodify,addrcaptionMain,\
MB_YESNOCANCELorMB_ICONQUESTION
.ifeax==IDYES
call_SaveFile;有待改动
.elseifeax==IDCANCEL
moveax,FALSE
ret
.endif
.endif
moveax,TRUE
ret
_CheckModifyStateENDP
;====================================================================================================
;Richedit的流出操作
_StreamProcOutPROCusesebxediesi_dwCookie,lpBuffer,NumBytes,pBytes
invokeWriteFile,hFile,lpBuffer,NumBytes,pBytes,0
xoreax,1;如果ReadFile或WriteFile返回1(成功),则最终eax返回0,说明操作成功
ret
_StreamProcOutENDP
;====================================================================================================
;Richedit的流入操作
_StreamProcInPROCusesebxediesi_dwCookie,lpBuffer,NumBytes,pBytes
invokeReadFile,hFile,lpBuffer,NumBytes,pBytes,0
xoreax,1;如果ReadFile或WriteFile返回1(成功),则最终eax返回0,说明操作成功
ret
_StreamProcInENDP
;====================================================================================================
;设置字体和字体的颜色
_SetFontPROC_lpszFont,_dwFontSize,_dwColor
local@stCf:
CHARFORMAT
invokeRtlZeroMemory,addr@stCf,sizeof@stCf
;开始填充stCf结构
mov@,sizeof@stCf
mov@,CFM_SIZEorCFM_FACEorCFM_BOLDorCFM_COLOR;字段掩码,用来指定结构中哪些字段是有效的
push_dwFontSize
pop@
push_dwColor
pop@
mov@,0
invokelstrcpy,addr@,_lpszFont
invokeSendMessage,hWinEdit,EM_SETTEXTMODE,1,0;设置工作模式
invokeSendMessage,hWinEdit,EM_SETCHARFORMAT,SCF_ALL,addr@stCf;为控件中的全部文本设置指定的格式
ret
_SetFontENDP
;====================================================================================================
;查找文字
_FindTextPROC
local@stFindText:
FINDTEXTEX
;设置查找区域
invokeSendMessage,hWinEdit,EM_EXGETSEL,0,addr@
.if&FR_DOWN;向下查找
push@pop@;将这个选择区域的结束位置用做下一次查找的起始点
.endif
mov@;一直查找到全部文本的最后
;设置查找选项
mov@,offsetszFindText
movecx,
andecx,FR_MATCHCASEorFR_DOWNorFR_WHOLEWORD
;查找并把光标设置到找到的文本上
invokeSendMessage,hWinEdit,EM_FINDTEXTEX,ecx,addr@stFindText;ecx中存储的是搜索选项
.ifeax==-1
movecx,hWinMain
.ifhFindDialog
movecx,hFindDialog
.endif
invokeMessageBox,ecx,addrnotFound,NULL,MB_OKorMB_ICONINFORMATION
ret
.endif
;找到文本以后,文本的位置在FINDTEXTEX结构的chrgText字段中返回,chrgText字段是一个CHARRANGE结构,直接在EM_EXSETSEL消息中使用它将选择区域设置到找到的文字上
invokeSendMessage,hWinEdit,EM_EXSETSEL,0,addr@
invokeSendMessage,hWinEdit,EM_SCROLLCARET,NULL,NULL;卷动文字,以便找到的文本能够出现在用户的视野中
ret
_FindTextENDP
;====================================================================================================
;保存文件,如果没有打开或创建文件则另存为
_SaveFilePROC
local@stES:
EDITSTREAM
.if!
hFile
call_SaveAs
.if!
eax
ret
.endif
.endif
mov@,FALSE;在Richedit的流操作中写文件
mov@,NULL
mov@,offset_StreamProcOut;回调函数
invokeSendMessage,hWinEdit,EM_STREAMOUT,SF_TEXT,addr@stES;流出操作,文本格式是简单的文本格式
invokeSendMessage,hWinEdit,EM_SETMODIFY,FALSE,0;设置修改状态
moveax,TRUE
ret
_SaveFileENDP
;=====================================================================================================
;另存为
_SaveAsPROC
local@stOF:
OPENFILENAME
local@stEs:
EDITSTREAM
invokeRtlZeroMemory,addr@stOF,sizeof@stOF
;显示"保存文件"对话框
;填充stOF结构
mov@,sizeof@stOF
pushhWinMain
pop@;所属窗口
mov@,offsetfilter;指定文件名筛选字符串
mov@,offsetszFileName
mov@,MAX_PATH;指定lpstrFile参数指向的缓冲区的长度,260
mov@,OFN_PATHMUSTEXIST;路径必须存在
mov@,offsetdefExt;默认扩展名
mov@,NULL;标题为“另存为”
invokeGetSaveFileName,addr@stOF
.ifeax
;创建新文件
invokeCreateFile,addrszFileName,GENERIC_READorGENERIC_WRITE,\;存取方式:
为读写
FILE_SHARE_READ,\;共享属性:
允许其他进程同时以读方式打开文件
0,\;安全属性:
无法被继承
CREATE_ALWAYS,\;创建新文件,如果文件已经存在则清除原文件
FILE_ATTRIBUTE_NORMAL,\;文件属性:
普通文件
0;文件模板句柄
.ifeax!
=INVALID_HANDLE_VALUE
pusheax
.ifhFile;有打开的文件
invokeCloseHandle,hFile
.endif
popeax
;保存文件
movhFile,eax;文件句柄
call_SaveFile
call_SetCaption
call_SetStatus
moveax,TRUE
ret
.else
invokeMessageBox,hWinMain,addrerrCreateFile,NULL,MB_OKorMB_ICONERROR
.endif
.endif
moveax,FALSE
ret
_SaveAsENDP
;=====================================================================================================
;打开及输入文件
_OpenFilePROC
local@stOF:
OPENFILENAME
local@stES:
EDITSTREAM
invokeRtlZeroMemory,addr@stOF,sizeof@stOF
;显示“打开文件”对话框
mov@,sizeof@stOF
pushhWinMain
pop@
mov@,offsetfilter
mov@,offsetszFileName
mov@,MAX_PATH
mov@,OFN_FILEMUSTEXISTorOFN_PATHMUSTEXIST;文件必须存在
invokeGetOpenFileName,addr@stOF
.ifeax
;创建文件
invokeCreateFile,addrszFileName,GENERIC_READorGENERIC_WRITE,\
FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0;打开存在的文件,当文件不存在时函数会返回失败
.ifeax==INVALID_HANDLE_VALUE
invokeMessageBox,hWinMain,addrerrOpenFile,NULL,MB_OKorMB_ICONSTOP
ret
.endif
pusheax
.ifhFile
invokeCloseHandle,hFile
.endif
popeax
movhFile,eax
;读入文件
mov@,TRUE;在Richedit的流操作中读文件
mov@,NULL
mov@,offset_StreamProcIn
invokeSendMessage,hWinEdit,EM_STREAMIN,SF_TEXT,addr@stES;流入操作,文本格式是简单的文本格式
invokeSendMessage,hWinEdit,EM_SETMODIFY,FALSE,0;设置修改状态
call_SetCaption
call_SetStatus
.endif
ret
_OpenFileENDP
;=====================================================================================================
;选择字体
_ChooseFontPROC
local@stCF:
CHOOSEFONT
invokeRtlZeroMemory,addr@stCF,sizeof@stCF
mov@,sizeof@stCF
pushhWinMain
pop@
mov@,offsetstLogFont;指定字体的名称和属性
pushdwFontColor
pop@
mov@,CF_SCREENFONTSorCF_INITTOLOGFONTSTRUCTorCF_EFFECTS;字体列表中只显示屏幕字体,对话框中显示“效果”复选框
invokeChooseFont,addr@stCF
.ifeax
push@
popdwFontColor
mov;用户选择的字体大小,单位是1/10磅
shleax,1
invoke_SetFont,addr
.endif
ret
_ChooseFontENDP
;=====================================================================================================
;设置标题栏的显示内容
_SetCaptionPROC
local@szBuffer[1024]:
byte
.ifszFileName;如果当前是某一文件,则显示文件名
moveax,offsetszFileName
.else
moveax,offsetnoName;否则显示未命名
.endif
invokewsprintf,addr@szBuffer,addrtitleFormat,eax
invokeSetWindowText,hWinMain,addr@szBuffer
ret
_SetCaptionENDP
;=====================================================================================================
;设置菜单项,状态栏的状态和信息
_SetStatusPROC
local@stRange:
CHARRANGE
local@dwLines,@dw
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 课程设计 win32 编写 记事本