汇编语言课程设计win32编写记事本讲课稿.docx

上传人:b****6 文档编号:4810348 上传时间:2022-12-09 格式:DOCX 页数:27 大小:38.50KB
下载 相关 举报
汇编语言课程设计win32编写记事本讲课稿.docx_第1页
第1页 / 共27页
汇编语言课程设计win32编写记事本讲课稿.docx_第2页
第2页 / 共27页
汇编语言课程设计win32编写记事本讲课稿.docx_第3页
第3页 / 共27页
汇编语言课程设计win32编写记事本讲课稿.docx_第4页
第4页 / 共27页
汇编语言课程设计win32编写记事本讲课稿.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

汇编语言课程设计win32编写记事本讲课稿.docx

《汇编语言课程设计win32编写记事本讲课稿.docx》由会员分享,可在线阅读,更多相关《汇编语言课程设计win32编写记事本讲课稿.docx(27页珍藏版)》请在冰豆网上搜索。

汇编语言课程设计win32编写记事本讲课稿.docx

汇编语言课程设计win32编写记事本讲课稿

 

汇编语言课程设计win32编写记事本

华北科技学院

 

课程设计说明书

 

课程名称:

汇编语言

班级:

计算机B08-1姓名:

_李鹏飞___

学号:

__200807014231__

设计题目:

___win32编写记事本___

设计时间:

_6月23日_至_7月1日__

指导教师:

_____杜杏菁_________________

评语:

_________________________________

_________________________________________

_________________________________________

_________________________________________

_________________________________________

评阅成绩:

____评阅教师:

_____

 

一、课程设计目的

进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。

二、课程设计要求

1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。

2.遵循模块化、结构化的程序设计方法。

3.要求程序必须正确。

4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。

5.要求程序结构合理,语句使用得当。

6.适当追求编程技巧和程序运行效率。

三、课程设计题目:

win32编写记事本

四、课题分析

WINDOW记事本的编写,要求能实现基本菜单框架并打开窗口,有能力的同学可以编写进行数据录入并保存的代码

开始

加载头文件

加载数据段

编译代码

设计窗体

编译生成文件

结束

五、流程图:

 

六、程序源代码:

.386

.modelflat,stdcall

optioncasemap:

none

includewindows.inc

includeuser32.inc

includelibuser32.lib

includekernel32.inc

includelibkernel32.lib

includeshell32.inc

includelibshell32.lib

includecomctl32.inc

includelibcomctl32.lib

includecomdlg32.inc

includelibcomdlg32.lib

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"RichEd20.dll",0

errTitledb"错误",0

noRichEditdb"无法找到RichEd20.dll"

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@stCf.cbSize,sizeof@stCf

mov@stCf.dwMask,CFM_SIZEorCFM_FACEorCFM_BOLDorCFM_COLOR;字段掩码,用来指定结构中哪些字段是有效的

push_dwFontSize

pop@stCf.yHeight

push_dwColor

pop@stCf.crTextColor

mov@stCf.dwEffects,0

invokelstrcpy,addr@stCf.szFaceName,_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@stFindText.chrg

.ifstFind.Flags&FR_DOWN;向下查找

push@stFindText.chrg.cpMax

pop@stFindText.chrg.cpMin;将这个选择区域的结束位置用做下一次查找的起始点

.endif

mov@stFindText.chrg.cpMax,-1;一直查找到全部文本的最后

;设置查找选项

mov@stFindText.lpstrText,offsetszFindText

movecx,stFind.Flags

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@stFindText.chrgText

invokeSendMessage,hWinEdit,EM_SCROLLCARET,NULL,NULL;卷动文字,以便找到的文本能够出现在用户的视野中

ret

_FindTextENDP

;====================================================================================================

;保存文件,如果没有打开或创建文件则另存为

_SaveFilePROC

local@stES:

EDITSTREAM

.if!

hFile

call_SaveAs

.if!

eax

ret

.endif

.endif

mov@stES.dwCookie,FALSE;在Richedit的流操作中写文件

mov@stES.dwError,NULL

mov@stES.pfnCallback,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@stOF.lStructSize,sizeof@stOF

pushhWinMain

pop@stOF.hwndOwner;所属窗口

mov@stOF.lpstrFilter,offsetfilter;指定文件名筛选字符串

mov@stOF.lpstrFile,offsetszFileName

mov@stOF.nMaxFile,MAX_PATH;指定lpstrFile参数指向的缓冲区的长度,260

mov@stOF.Flags,OFN_PATHMUSTEXIST;路径必须存在

mov@stOF.lpstrDefExt,offsetdefExt;默认扩展名

mov@stOF.lpstrTitle,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@stOF.lStructSize,sizeof@stOF

pushhWinMain

pop@stOF.hwndOwner

mov@stOF.lpstrFilter,offsetfilter

mov@stOF.lpstrFile,offsetszFileName

mov@stOF.nMaxFile,MAX_PATH

mov@stOF.Flags,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@stES.dwCookie,TRUE;在Richedit的流操作中读文件

mov@stES.dwError,NULL

mov@stES.pfnCallback,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@stCF.lStructSize,sizeof@stCF

pushhWinMain

pop@stCF.hwndOwner

mov@stCF.lpLogFont,offsetstLogFont;指定字体的名称和属性

pushdwFontColor

pop@stCF.rgbColors

mov@stCF.Flags,CF_SCREENFONTSorCF_INITTOLOGFONTSTRUCTorCF_EFFECTS;字体列表中只显示屏幕字体,对话框中显示“效果”复选框

invokeCho

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1