记事本汇编课程设计.doc_第1页
记事本汇编课程设计.doc_第2页
记事本汇编课程设计.doc_第3页
记事本汇编课程设计.doc_第4页
记事本汇编课程设计.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华 北 科 技 学 院课程设计说明书课程名称: 汇编语言程序设计 班 级: 计科B093 姓名:_ 杜晓春 学 号:_ 200807014330 设计题目: Win32编写记事本 设计时间: 6/25/ 2010 至 7/1/2010 指导教师:_ _ 陈振国 评 语: 评阅成绩: 评阅教师: 一、课程设计目的使用所学过的汇编语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。二、课程设计要求1要求编写并调试通过一个小型软件,实现对软件或硬件的操作。2遵循模块化、结构化的程序设计方法。3. 要求程序必须正确。4. 程序简明易懂,多运用输入输出提示,出错信息及必要的注释。5. 要求程序结构合理,语句使用得当。6. 适当追求编程技巧和程序运行效率。三、课程设计题目:Win32记事本要求:能实现基本菜单框架并打开窗口,有能力的同学可以编写进行数据录入并保存的代码四、课题分析用32位汇编语言以WINDOWS SDK编程的模式编写记事本,为编写一个简洁可用的记事本程序,选择以对话框为程序主界面,通过RichEdit控件直接进行文本的录入、读取、存储等操作。菜单项中设置基本的文件新建、打开、保存、退出,及文本的撤销、重做、删除、剪切、复制、粘贴、全选功能,同时加入工具栏,工具栏上加入基本常用的功能按钮。五、流程图开 始文 件编 辑帮 助新建保存另存为退出打开撤销前进删除剪切复制粘贴全选关于六、程序源代码记事本.rc#include res/记事本Res.rc#include res/记事本Mnu.rc#include res/记事本Dlg.rc#include Res/关于Dlg.rc记事本Res.rc#define IDB_TBRBMP1212#define IDI_ICON1213IDB_TBRBMPBITMAP DISCARDABLE Res/工具栏图标.bmpIDI_ICONICON DISCARDABLE Res/图标.ico记事本Mnu.rc#define IDM_MENU 10000#define IDM_FILE_NEW 10001#define IDM_FILE_OPEN 10002#define IDM_FILE_SAVE 10003#define IDM_FILE_SAVEAS 10004#define IDM_FILE_EXIT 10006#define IDM_EDIT_UNDO 10101#define IDM_EDIT_REDO 10102#define IDM_EDIT_DELETE 10103#define IDM_EDIT_CUT 10104#define IDM_EDIT_COPY 10105#define IDM_EDIT_PASTE 10106#define IDM_EDIT_SELECTALL 10107#define IDM_HELP_ABOUT 10201IDM_MENU MENUEXBEGIN POPUP 文件 BEGIN MENUITEM 新建,IDM_FILE_NEW MENUITEM 打开,IDM_FILE_OPEN MENUITEM 保存,IDM_FILE_SAVE MENUITEM 另存为.,IDM_FILE_SAVEAS MENUITEM ,0x00000800 MENUITEM 退出,IDM_FILE_EXIT END POPUP 编辑 BEGIN MENUITEM 撤销,IDM_EDIT_UNDO MENUITEM 前进,IDM_EDIT_REDO MENUITEM 删除,IDM_EDIT_DELETE MENUITEM ,0x00000800 MENUITEM 剪切,IDM_EDIT_CUT MENUITEM 复制,IDM_EDIT_COPY MENUITEM 粘贴,IDM_EDIT_PASTE MENUITEM 全选,IDM_EDIT_SELECTALL END POPUP 帮助 BEGIN MENUITEM 关于,IDM_HELP_ABOUT ENDEND记事本Dlg.rc#define IDD_DLG 1000#define IDC_TOOLBAR 1001#define IDC_RICHEDIT 1002IDD_DLG DIALOGEX 228,88,596,499CAPTION 记事本FONT 7,宋体,400,0CLASS DLGCLASSSTYLE 0x96CF0000EXSTYLE 0x00000000BEGIN CONTROL Test,IDC_TOOLBAR,ToolbarWindow32,0x52000800,0,0,596,24,0x00000000 CONTROL ,IDC_RICHEDIT,RichEdit20A,0x503010C4,0,24,597,533,0x00000200END关于Dlg.rc#define IDD_DLG1 3000#define IDC_STC1 1001#define IDC_IMG1 3001IDD_DLG1 DIALOGEX 266,133,136,50CAPTION 关于FONT 9,宋体,400,0,134STYLE 0x10CF0000EXSTYLE 0x00000080BEGIN CONTROL Win32 汇编记事本 计科B093 杜晓春,IDC_STC1,Static,0x50000000,50,10,78,32,0x00000000 CONTROL #1213,IDC_IMG1,Static,0x50000203,4,4,42,38,0x00000000END记事本.incinclude windows.incinclude user32.incinclude kernel32.incinclude shell32.incinclude comctl32.incinclude comdlg32.incinclude gdi32.incincludelib user32.libincludelib kernel32.libincludelib shell32.libincludelib comctl32.libincludelib comdlg32.libincludelib gdi32.libWinMainPROTO :DWORD,:DWORD,:DWORD,:DWORDWndProcPROTO :DWORD,:DWORD,:DWORD,:DWORDAboutProc PROTO :DWORD,:DWORD,:DWORD,:DWORD;主对话框IDD_DLGequ 1000IDC_TOOLBARequ 1001IDC_RICHEDITequ 1002IDM_MENUequ 10000;菜单IDM_FILE_NEWequ 10001IDM_FILE_OPENequ 10002IDM_FILE_SAVEequ 10003IDM_FILE_SAVEASequ 10004IDM_FILE_PRINTequ 10005IDM_FILE_EXITequ 10006IDM_EDIT_UNDOequ 10101IDM_EDIT_REDOequ 10102IDM_EDIT_DELETEequ 10103IDM_EDIT_CUTequ 10104IDM_EDIT_COPYequ 10105IDM_EDIT_PASTEequ 10106IDM_EDIT_SELECTALLequ 10107IDM_HELP_ABOUTequ 10201;关于IDD_DLG1 equ 3000IDC_STC1 equ 3001;工具栏图标IDB_TOOLBARMAPequ 1212;图标IDI_ICONequ 1213.const;填充按钮结构stToolBarTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTONTBBUTTON nToolBarequ 13RichEditDLLdb riched20.dll,0szClassNamedb DLGCLASS,0szAppNamedb 记事本,0OpenFileFail db 无法打开文件,0SaveFileFaildb 无法保存文件,0szWantToSave db 是否将改动保存到,0Dh,0NewFileName db 新建文件,0szNULLdb 0szFontdb 宋体,0szFileTypedb 文本文档(*.txt),0,*.txt,0db 所有文件(*.*),0,*.*,0,0szDefExtdb txt,0.data?hRichEdDLLdd ?hInstancedd ?CommandLinedd ?hIcondd ?hWinMaindd ?hRichEditdd ?hFiledd ?FileNamedb 100 dup(?)记事本.asm.386.model flat,stdcalloption casemap:noneinclude 记事本.Inc.codestart:invoke GetModuleHandle,NULLmovhInstance,eax;获取命令行参数invoke GetCommandLinemovCommandLine,eax;装入库invoke LoadLibrary,addr RichEditDLLmovhRichEdDLL,eaxinvoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULTpusheax;释放库invoke FreeLibrary,hRichEdDLLpopeaxinvoke ExitProcess,eaxWinMain proc _hInstance,_hPrevInstance,_lpCmdLine,_nCmdShowLOCALstWndClass:WNDCLASSEXLOCALstMsg:MSG;设计窗口类movstWndClass.cbSize,SIZEOF WNDCLASSEXmovstWndClass.style,CS_HREDRAW or CS_VREDRAWmovstWndClass.lpfnWndProc,OFFSET WndProcmovstWndClass.cbClsExtra,NULLmovstWndClass.cbWndExtra,DLGWINDOWEXTRApush_hInstancepopstWndClass.hInstancemovstWndClass.hbrBackground,NULLmovstWndClass.lpszMenuName,IDM_MENUmovstWndClass.lpszClassName,OFFSET szClassNameinvoke LoadIcon,_hInstance,IDI_ICONmovhIcon,eaxmovstWndClass.hIcon,eaxmovstWndClass.hIconSm,eaxinvoke LoadCursor,NULL,IDC_ARROWmovstWndClass.hCursor,eax;注册窗口invoke RegisterClassEx,addr stWndClass;建立对话框窗口invoke DialogBoxParam,_hInstance,IDD_DLG,NULL,addr WndProc,NULLretWinMain endpStreamProc proc _dwCookie,_pBuffer,_NumBytes,_lpBytes.if_dwCookieinvoke ReadFile,hFile,_pBuffer,_NumBytes,_lpBytes,0.elseinvoke WriteFile,hFile,_pBuffer,_NumBytes,_lpBytes,0.endifxoreax,eaxretStreamProc endpSetWinCaption procLOCALbuffer120:BYTELOCALbuffer14:BYTE;复制程序名invoke lstrcpy,addr buffer,addr szAppName;添加-到标题名moveax, - movdword ptr buffer1,eaxinvoke lstrcat,addr buffer,addr buffer1;添加文件路径到标题名invoke lstrcat,addr buffer,addr FileName;设置标题栏invoke SetWindowText,hWinMain,addr bufferretSetWinCaption endpSaveFile proc _lpFileNameLOCALstEditstream:EDITSTREAM;创建新文件,如果已经存在则清除源文件invoke CreateFile,_lpFileName,GENERIC_WRITE, FILE_SHARE_READ,NULL,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,0;创建成功.if eax!=INVALID_HANDLE_VALUEmovhFile,eax;流出标志movstEditstream.dwCookie,FALSE;回调函数movstEditstream.pfnCallback,offset StreamProc;richedit中的文本写入文件invoke SendMessage,hRichEdit,EM_STREAMOUT,SF_TEXT,addr stEditstream;关闭文件invoke CloseHandle,hFile;修改标志清零invoke SendMessage,hRichEdit,EM_SETMODIFY,FALSE,0 moveax,FALSE.elseinvoke MessageBox,hWinMain,addr SaveFileFail,addr szAppName,MB_OKmoveax,TRUE.endifretSaveFile endpSaveEditAs procLOCALstOpenFileName:OPENFILENAMELOCALbufferMAX_PATH:BYTELOCALbuffer1100:BYTE;清零 invoke RtlZeroMemory,addr stOpenFileName,sizeof stOpenFileName;填充OpenFileName结构movstOpenFileName.lStructSize,sizeof stOpenFileNamepushhWinMainpopstOpenFileName.hwndOwner;父窗口句柄pushhInstancepopstOpenFileName.hInstancemovstOpenFileName.lpstrFilter,offset szFileTypemovbuffer0,0;缓冲区清零leaeax,buffermovstOpenFileName.lpstrFile,eax;指定全路径缓冲区movstOpenFileName.nMaxFile,sizeof buffermovbuffer10,0;缓冲区清零leaeax,buffer1movstOpenFileName.lpstrFileTitle,eax;指定文件名缓冲区movstOpenFileName.nMaxFileTitle,sizeof buffer1movstOpenFileName.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST or OFN_OVERWRITEPROMPT;设置对话框行为 movstOpenFileName.lpstrDefExt,offset szDefExt ;打开另存为通用对话框invoke GetSaveFileName,addr stOpenFileName;保存文件.if eaxinvokeSaveFile,addr buffer;设置标题栏invoke lstrcpy,addr FileName,addr buffer1invoke SetWinCaption.endifretSaveEditAs endpSaveEdit proc;判断是否为新建文件,是的话直接保存,不是的话另存为invoke lstrcmp,addr FileName,addr NewFileName.if eaxinvoke SaveFile,addr FileName.elseinvoke SaveEditAs.endifretSaveEdit endpWantToSave procLOCALbuffer200:BYTELOCALbuffer12:BYTE;获取修改标志invoke SendMessage,hRichEdit,EM_GETMODIFY,0,0;richedit被修改.if eax;制作显示字符串invoke lstrcpy,addr buffer,addr szWantToSaveinvoke lstrcat,addr buffer,addr FileNamemovax,?movword ptr buffer1,axinvoke lstrcat,addr buffer,addr buffer1invoke MessageBox,hWinMain,addr buffer,addr szAppName,MB_YESNOCANCEL or MB_ICONQUESTION.if eax=IDYESinvoke SaveEdit .elseif eax=IDNO moveax,FALSE .else moveax,TRUE.endif.endifretWantToSave endpOpenEditprocLOCALstOpenFileName:OPENFILENAMELOCALstEditstream:EDITSTREAMLOCALbufferMAX_PATH:BYTELOCALbuffer1100:BYTELOCALstCharRange:CHARRANGE;清零invoke RtlZeroMemory,addr stOpenFileName,sizeof stOpenFileName;填充OpenFileName结构movstOpenFileName.lStructSize,sizeof stOpenFileNamepushhWinMainpopstOpenFileName.hwndOwner;父窗口句柄pushhInstancepopstOpenFileName.hInstancemovstOpenFileName.lpstrFilter,NULLmovbuffer0,0;缓冲区清零leaeax,buffermovstOpenFileName.lpstrFile,eax;指定全路径缓冲区movstOpenFileName.nMaxFile,sizeof buffermovbuffer10,0;缓冲区清零leaeax,buffer1movstOpenFileName.lpstrFileTitle,eax;指定文件名缓冲区movstOpenFileName.nMaxFileTitle,sizeof buffer1movstOpenFileName.lpstrDefExt,NULLmovstOpenFileName.Flags,OFN_FILEMUSTEXIST or OFN_HIDEREADONLY or OFN_PATHMUSTEXIST;设置对话框行为;显示打开通用对话框invoke GetOpenFileName,addr stOpenFileName.if eax;打开已存在的文件invoke CreateFile,addrbuffer,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0;打开文件成功.if eax!=INVALID_HANDLE_VALUE;返回文件句柄movhFile,eax;获取打开文件的文件名invoke lstrcpy,addr FileName,addr buffer1;流入标记movstEditstream.dwCookie,TRUE;设置回调函数movstEditstream.pfnCallback,offset StreamProc;装入文本invoke SendMessage,hRichEdit,EM_STREAMIN,SF_TEXT,addr stEditstream;关闭文件invoke CloseHandle,hFile;修改标志清零invoke SendMessage,hRichEdit,EM_SETMODIFY,FALSE,0;初始化光标位置movstCharRange.cpMin,0movstCharRange.cpMax,0invoke SendMessage,hRichEdit,EM_EXSETSEL,0,addr stCharRangeinvoke SetWinCaptionmoveax,FALSE.elseinvoke MessageBox,hWinMain,addr OpenFileFail,addr szAppName,MB_OKmoveax,TRUE.endif.endifretOpenEdit endpInitRichEdit proc_hWin,_hRichEditLOCALstCharRange:CHARRANGELOCALstCharformat:CHARFORMATinvoke GetDlgItem,_hWin,IDC_RICHEDITmovhRichEdit,eax;全选movstCharRange.cpMin,0movstCharRange.cpMax,-1invoke SendMessage,hRichEdit,EM_EXSETSEL,0, addr stCharRange;设置文本格式movstCharformat.cbSize,sizeof stCharformatmovstCharformat.dwMask,CFM_CHARSET or CFM_FACE or CFM_SIZEinvoke lstrcpyn,addr stCharformat.szFaceName,addr szFont,LF_FACESIZEmovstCharformat.yHeight,250invoke SendMessage,hRichEdit,EM_SETCHARFORMAT, SCF_SELECTION,addr stCharformat;修改标志清零invoke SendMessage,hRichEdit,EM_SETMODIFY,FALSE,0;设置焦点invoke SetFocus,hRichEdit;设置光标movstCharRange.cpMin,0movstCharRange.cpMax,0invoke SendMessage,hRichEdit,EM_EXSETSEL,0, addr stCharRangeretInitRichEdit endpDoToolBar proc _hInstance,_hToolBarLOCALstTmap:TBADDBITMAPinvoke SendMessage,_hToolBar,TB_BUTTONSTRUCTSIZE,sizeof TBBUTTON,0;填充位图结构push_hInstancepopstTmap.hInstmovstTmap.nID,IDB_TOOLBARMAP;装载工具栏位图invoke SendMessage,_hToolBar,TB_ADDBITMAP,15,addr stTmap;添加按钮invoke SendMessage,_hToolBar,TB_ADDBUTTONS,nToolBar,addr stToolBar;返回工具栏句柄moveax,_hToolBarretDoToolBar endpAboutProc proc _hWin,_stMsg,_wParam,_lParammoveax,_stMsg.if eax=WM_CLOSEinvoke EndDialog,_hWin,0.endifxor eax,eaxretAboutProc endpWndProc proc _hWin,_stMsg,_wParam,_lParamLOCALstRect:RECTLOCALheight:DWORDLOCALhContrl:HWNDLOCALstCharRange:CHARRANGEmoveax,_stMsg.if eax=WM_INITDIALOG;主窗口句柄赋值moveax,_hWinmovhWinMain,eax;工具栏初始化invoke GetDlgItem,_hWin,IDC_TOOLBARinvoke DoToolBar,hInstance,eax;标题栏初始化invoke lstrcpy,addr FileName,addr NewFileNameinvoke SetWinCaption;Richedit初始化invoke GetDlgItem,_hWin,IDC_RICHEDITmovhRichEdit,eaxinvokeInitRichEdit,_hWin,hRichEdit.elseif eax=WM_COMMANDmoveax,_wParam.if eax=IDM_FILE_NEWinvoke WantToSave.if !eax;Richedit清零invoke SetWindowText,hRichEdit,addr szNULL;Richedit初始化invokeInitRichEdit,_hWin,hRichEdit;重置标题栏invoke lstrcpy,addr FileName,addr NewFileNameinvoke SetWinCaption.endifinvoke SetFocus,hRichEdit.elseif eax=IDM_FILE_OPENinvoke WantToSave.if !eaxinvoke OpenEdit.endifinvoke SetFocus,hRichEdit.elseif eax=IDM_FILE_SAVEinvoke SaveEditinvoke SetFocus,hRichEdit.elseif eax=IDM_FILE_SAVEASinvoke SaveEditAsinvoke SetFocus,hRichEdit.elseif eax=IDM_FILE_EXITinvoke SendMessage,_hWin,WM_CLOSE,0,0.elseif eax=IDM_EDIT_UNDOinvoke SendMessage,hRichEdit,EM_UNDO,0,0.elseif eax=IDM_EDIT_REDOinvoke SendMessage,hRichEdit,EM_REDO,0,0.elseif eax=IDM_EDIT_DELETEinvoke SendMessage,hRichEdit,EM_REPL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论