
汇编语言课程设计win32编写记事本Word版.doc
27页华 北 科 技 学 院课程设计说明书课程名称: 汇编语言 班级: 计算机B08-1 姓名:_李鹏飞_ __学号:__ 200807014231 __设计题目:___ win32编写记事本 ___设计时间: _ 6月23日 _至_ 7月1日 __指导教师:_____ 杜杏菁_ ________________评 语:_____________________________________________________________________________________________________________________________________________________________________________________________________评阅成绩:__ __评阅教师:_____推荐精选一、课程设计目的进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。
二、课程设计要求 1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作2.遵循模块化、结构化的程序设计方法3.要求程序必须正确4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释5.要求程序结构合理,语句使用得当6.适当追求编程技巧和程序运行效率三、课程设计题目:win32编写记事本四、课题分析WINDOW 记事本的编写,要求能实现基本菜单框架并打开窗口,有能力的同学可以编写进行数据录入并保存的代码开 始加载头文件加载数据段编译代码设计窗体编译生成文件结 束五、流程图:推荐精选六、程序源代码:.386.model flat,stdcalloption casemap:noneinclude windows.incinclude user32.incincludelib user32.libinclude kernel32.incincludelib kernel32.libinclude shell32.incincludelib shell32.libinclude comctl32.incincludelib comctl32.libinclude comdlg32.incincludelib comdlg32.libICO_MAIN EQU 1000h ;图标IDM_MAIN EQU 2000h ;菜单IDA_MAIN EQU 2000h ;加速键IDM_NEW EQU 2101h ;新建IDM_OPEN EQU 2102h ;打开IDM_SAVE EQU 2103h ;保存IDM_SAVEAS EQU 2104h ;另存为IDM_EXIT EQU 2105h ;退出IDM_UNDO EQU 2201h ;撤销IDM_CUT EQU 2203h ;剪切IDM_COPY EQU 2204h ;复制IDM_PASTE EQU 2205h ;粘贴IDM_DELETE EQU 2206h ;删除IDM_FIND EQU 2207h ;查找IDM_REPLACE EQU 220Ah ;替换IDM_SELECTALL EQU 220Bh ;全选IDM_FONT EQU 2301h ;字体IDM_STATUSBAR EQU 2401h ;状态栏IDM_HELP EQU 2501h ;帮助主题IDM_ABOUT EQU 2502h ;关于IDM_MENUHELP EQU 2601h ;菜单信息.data?hInstance dd ?推荐精选hWinMain dd ?hMenu dd ?hWinStatus dd ?hWinEdit dd ?hFile dd ?hFindDialog dd ?hRichEdit dd ?dwFontColor dd ?idFindMessage dd ?stFind FINDREPLACE >szFindText db 100 dup (?)szReplaceText db 100 dup (?)szFileName db MAX_PATH dup (?)stLogFont LOGFONT >dwOption dd ?.dataF_STATUSBAR equ 00000001hdllEdit db "RichEd20.dll",0errTitle db "错误",0noRichEdit db "无法找到RichEd20.dll"className db "TextEditor",0captionMain db "文本编辑器",0classEdit db "RichEdit20A",0fontFace db "Fixedsys",0modify db "你已经改动过啦,要不要存一下?",0filter db "文本文件(*.txt)",0,"*.txt",0,"所有文件",0,"*.*",0,0defExt db "txt",0titleFormat db "%s - 我的记事本",0errCreateFile db "咦!出现问题了!",0errOpenFile db "咦!怎么打不开!",0notFound db "不给力啊,找不到!",0noName db "还没起名字",0timeFormat db "%02d:%02d:%02d",0charsFormat db "字节数:%d",0lineFormat db "行:%d",0colFormat db "列:%d",0helpTitle db "帮助",0helpText db "Sorry!无法提供任何帮助",0aboutTitle db "关于 记事本",0aboutText db "我的记事本",0ah,0dh,"作者:李鹏飞",0ah,0dh,"2010年07月01日",0ah,0dh,0dwStatusWidth dd 100,200,300,400,-1推荐精选dwMenuHelp dd 0,IDM_MENUHELP,0,0FINDMSGSTRING db "commdlg_FindReplace",0.code;====================================================================================================_CheckModifyState PROC invoke SendMessage,hWinEdit,EM_GETMODIFY,0,0 ;获取控件内容是否改变的信息 .if eax != 0 invoke MessageBox,hWinMain,addr modify,addr captionMain,\ MB_YESNOCANCEL or MB_ICONQUESTION .if eax == IDYES call _SaveFile ;有待改动 .elseif eax == IDCANCEL mov eax,FALSE ret .endif .endif mov eax,TRUE ret_CheckModifyState ENDP;====================================================================================================;Richedit的流出操作_StreamProcOut PROC uses ebx edi esi _dwCookie,lpBuffer,NumBytes,pBytes invoke WriteFile,hFile,lpBuffer,NumBytes,pBytes,0 xor eax,1 ;如果ReadFile或WriteFile返回1(成功),则最终eax返回0,说明操作成功 ret_StreamProcOut ENDP;====================================================================================================;Richedit的流入操作_StreamProcIn PROC uses ebx edi esi _dwCookie,lpBuffer,NumBytes,pBytes invoke ReadFile,hFile,lpBuffer,NumBytes,pBytes,0 xor eax,1 ;如果ReadFile或WriteFile返回1(成功),则最终eax返回0,说明操作成功 ret推荐精选_StreamProcIn ENDP;====================================================================================================;设置字体和字体的颜色_SetFont PROC _lpszFont,_dwFontSize,_dwColor local @stCf:CHARFORMAT invoke RtlZeroMemory,addr @stCf,sizeof @stCf ;开始填充stCf结构 mov @stCf.cbSize,sizeof @stCf mov @stCf.dwMask,CFM_SIZE or CFM_FACE or CFM_BOLD or CFM_COLOR ;字段掩码,用来指定结构中哪些字段是有效的 push _dwFontSize pop @stCf.yHeight push _dwColor pop @stCf.crTextColor mov @stCf.dwEffects,0 invoke lstrcpy,addr @stCf.szFaceName,_lpszFont invoke SendMessage,hWinEdit,EM_SE。
