




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
-汇编课程设计-win32记事本课程设计说明书汇编语言课程设计班级: 姓名: 学号 2 设计题目:_Win32记事本_设计时间: 至 指导教师:_ _评 语:_评阅成绩:_评阅教师:_一、课程设计目标和要求使学生综合使用所学过的汇编语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。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:hwnd 所属窗口;massage 消息控件;wParam wLaram根据控件决定参数的值。Charrange:cpMin 当前第一个字符的位置;cpMax 当前最后一个字符的后一个位置。OPENFILENAME:lStructSize 该结构的大小;hwndOwner 对话框窗口的句柄: lpstrFiler 指向一对空字符结束的过滤字符串的一个缓冲区; lpstrFile 用于存放文件的路径,文件扩展名;nMaxFile 用于定义lpstrFile缓冲区的初始大小。 EDITSTREAM: dwCookie 指向文件的句柄;dwError 指向错误码;pfnCallback 指向过程的地址。 WNDCLASSEX: hCurse 指向光标位置的句柄;Icon 指向图标的句柄;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,addr szFileName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0;调用CreateFile函数,addr szFileName取要打开文件名的地址,将该文件设置为可读可写,读可分享,文件必须存在,属性为默认属性,没有指定到文件的句柄。.ifeax =INVALID_HANDLE_VALUE 如果句柄值不合法invokeMessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONSTOP ;弹出消息框提示“文件不存在”ret ;返回.endif (省略部分代码) movstES.pfnCallback,offset _ProcStream;利用EDITSTREAM类型中pfnCallback这一成员传递_ProcStream子程序的地址。实现子程序的调用。_SaveFile_Saveas:该两个程序都实现保存功能,所以放在一起介绍。文件保存子程序中调用了文件另存为子程序,因为实现过程放在另存为子程序中。实现过程与_OpenFile子程序类似,都是定义了相关结构体的变量,只是将读入流改为了写入流。 流程图:_Quit:该程序实现了退出记事本的功能。invoke_CheckModify ;先判断编辑区文本是否改变。.ifeax ;若返回值为真。invokeDestroyWindow,hWinMain ;则关闭该窗口及子窗口。 模块三 属于编辑菜单项的子程序,包含查找对话框初始化子程序(_Init)、查找子程序(_FindText)、替换子程序(_ReplaceText)、替换全部子程序(_ReplaceAll)。_Init:利用charformat结构体中的IStructSize成员初始化对话框。进行相关成员变量的赋值后。invokeRegisterWindowMessage,addr FINDMSGSTRING;注册自定义消息,返回消息IDmovidFindMessage,eaxinvokeCreateWindowEx,WS_EX_CLIENTEDGE,offset szClassEdit,NULL,WS_CHILD OR WS_VISIBLE OR WS_VSCROLL ORWS_HSCROLL OR ES_MULTILINE or ES_NOHIDESEL,0,0,0,0,hWinMain,0,hInstance,NULL;调用CreateWindowEx创建重叠式子窗口,对其属性进行设置,依赖父窗口为hWinMain_FindText:该子程序实现了查找文本的功能。利用FINDTEXTEX结构体,char.cpMax和char.cpMin设置查找范围,lpstrText设置查找内容。invokeSendMessage,hWinEdit,EM_FINDTEXTEX,ecx,addr stFindText;显示查找框,应用EM_FINDTEXTEX控件在正文中进行搜索。invokeSendMessage,hWinEdit,EM_EXSETSEL,0,addrstFindText.chrgTextinvokeSendMessage,hWinEdit,EM_SCROLLCARET,NULL,NULL;通过EM_EXSETSEL将光标移至找到的文本上,并通过EM_SCROLLCARET设置为可见。流程图:_ReplaceText:该子程序实现了替换文本的功能。调用_FindText子程序查找到要替换的位置invokeSendMessage,hWinEdit,EM_REPLACESEL,TRUE,addr szReplaceText;通过EM_REPLACESE控件用指定字符串替换当前内容。_ReplaceAll:该子程序与_ReplaceText作用原理相同,只是将全文都划为查找范围,然后显示查找框,再进行替换。模块四 属于格式字体的子程序,包含字体设置子程序(_SetFont)和字体选择子程序(_ChooseFont)_SetFont:该子程序实现了设置文本的功能。含有三个参数,分别为字体、字号、字色。这三个参数为将要设置字体的三个属性。利用CHARFORMAT结构体中的成员存放要设置的字体属性。invokeSendMessage,hWinEdit,EM_SETTEXTMODE,1,0;利用控件EM_SETTEXTMODE设置文本格式。invokeSendMessage,hWinEdit,EM_SETCHARFORMAT,SCF_ALL,addr stCf;利用EM_SETCHARFORMAT控件设置文本字体格式。_ChooseFont:该子程序实现了选择字体属性的功能。利用CHOOSEFONT结构体中的成员,存放从编辑字体对话框中选择的属性。invokeChooseFont,addr stCF ;调用编辑字体对话框函数,并传参给局部定义变量。invoke_SetFont,addr stLogFont.lfFaceName,eax,stCF.rgbColors;调用_SetFont子程序,设置文本字体属性。模块五 属于窗口建立过程子程序,包含了窗口构建子程序(_WinMain)和窗口组件添加子程序(_ProcWinMain)_WinMain:该子程序实现了构建窗口的功能。实现通过利用WNDCLASSEX结构体中成员存放窗口的属性,如hCursor存放光标的句柄,hIcon存放图标的句柄,cbSize存放窗口大小等。invokeGetModuleHandle,NULL;调用GetModuleHandle得到应用实例的句柄。invokeLoadMenu,hInstance,IDM_MAIN;调用LoadMenu加载菜单。invokeLoadAccelerators,hInstance,IDA_MAIN;调用LoadAccelerators加载快捷键invokeLoadLibrary,offset szDllEdit;调用LoadLibrary加载动态库。(省略部分代码)movstWndClass.style,CS_HREDRAW or CS_VREDRAW;窗口的风格,决定宽、高改变时,重画窗口。movstWndClass.lpfnWndProc,offset _ProcWinMain;指定基于这个类建立的窗口的过程地址。invokeCreateWindowEx,NULL,offset szClassName,offset szCaptionMain,WS_OVERLAPPEDWINDOW,200,100,600,400,NULL,hMenu,hInstance,NULL;调用CreateWindowEx建立窗口。invokeShowWindow,hWinMain,SW_SHOWNORMAL;显示并激活窗口,恢复正常大小。invokeUpdateWindow,hWinMain ;刷新窗口客户区。invokeTranslateAccelerator,hWinMain,hAccelerator,addr stMsg;调用TranslateAccelerator翻译快捷键。_ProcWinMain:该过程实现了建立菜单和文本区联系的功能。窗口过程是窗口的核心部分,其中WM_COMMAND是实现所有命令的基础,它联系着菜单项与文本编辑区。在WM_COMMAND中,使得菜单和相应命令一一对应,这主要是通过if-elseif-else-endif语句实现多分枝,通过子程序的调用实现相应的操作。除新建外,其他功能都调用了相应的子程序,如_OpenFile等;或者调用系统函数SendMessage,用控件控制功能,如复制功能则实现如下:invokeSendMessage,hWinEdit,WM_COPY,0,0 新建算法的设计:调用_CheckModify 判断文本区是否被改变并弹出是否保存信息。若不是则判断是否有文件,若有则关闭该文件,若没有,则清屏,重设标题文字,重置菜单状态。 流程图:6.运行结果截图及分析(1)总体运行图(2)文件打开对话框运行图(3)文件保存对话框运行图(4)文字编辑运行图(以查找为例)(5)修改字体运行图(6)消息提示信息五、总结、收获、体会这次课程设计可真是一波三折。之前我们学的是16位的汇编语言,要过渡到32位汇编语言编写程序,是有一定难度的。当决定了选择这个课题的时候,就去图书馆查阅相关资料,本意是在课程设计的头2天把代码找好,接着3天把代码输入电脑,再接着4天研究程序,剩下的日子写报告。计划得不错,但是计划赶不上变化,当我真正打好代码的时候已经花了6天,而且代码还不能用。好在天无绝人之路,后面得到一份能直接运行的代码,并且有相对详细的代码解释。所以这次课程设计的代码是借鉴了其他人的。我只是在研究别人的代码中有所收获。通过本次课程设计,我发现学科之间都是相通的。例如编写记事本程序的。前一段时间,我试着用java语言自己编写了一个功能不太完善的记事本。在拿到这份代码的时候,理解起来也不那么难了。记事本程序分成窗口的构建,菜单栏的添加及设计,相关功能的实现三大块。在用Win32汇编语言解决这三个问题的时候,普遍采用的都是调用系统函数。说到系统函数,查询api是必不可少的了。由于对win32只是刚刚接触,很多概念都不清楚,那么查询资料是很有必要的。我翻阅了很多讲解win32汇编语言的资料书,另外在分析代码的时候,将不了解的系统函数和关键字记下来。通篇看完代码后,再去查阅api。有时候api中没有相关的内容,例如结构体定义。那就要上网查询了。经过这一段时间的学习,在基于16位汇编语言的基础上,新掌握了结构体这个概念。结构体在学习数据结构的时候有所接触,其有固定的成员变量,在定义结构体时,用定义的结构体名来调用其成员。有些特定的系统函数会调用特定的结构体,如GetFileName 这个系统函数则要调用OPRNFILENAME这个结构体定义的变量。另外我还学会了定义子程序的时候,也是可以传入口参数的,还增加了用local定义局部变量这个概念。并且在调用子程序的时候,要用到关键字 invoke,invoke语句中如果要传地址,则要用到addr 关键字。在实现程序功能的时候,除了调用系统函数,子程序,控件的应用也是必不可少的。在很多功能上,例如替换当前文字为指定文字时,就要用到EM_REPLACE控件来实现功能,不同控件也有不同的参数和返回值类型。以MB_开头的按钮控件种类也非常多,在弹出消息盒子时常常用到。有了这一次课程设计的基础,以后在win32汇编语言这一块就不会一无所知了,并且会慢慢尝试用win32语言编写其他应用程序。六、用户手册 1.双击运行程序后,出现运行界面。空白区域单击,出现闪动光标后即可输入文字。 2.打开文件:单击文件菜单选项,在下拉列表中选择打开,在弹出的对话框中选择文件路径,选中要打开的文件名,单击确定打开文件。3.保存文件:输入完毕后,单击文件菜单选项,在下拉列表中单击保存,在弹出的保存文件对话框中选择路径,输入文件名,单击确定保存。4.编辑文字:选定要编辑的文字后,单击编辑菜单选项,在下拉列表中选中操作。5.编辑字体:单击格式菜单选项,单击字体,在弹出的对话框中,选择文字的各项属性,单击确定以应用。七、参考资料 1.Windows汇编语言程序案例分析 清华大学出版社,戴水贵、童爱红、余海英、冯小明编著。 2.32位汇编语言程序设计 机械工业出版社,钱晓婕编著。 3.32位汇编语言程序设计 电子工业出版社,穆玲玲,钱晓婕主编,贾宗璞主审。 4.汇编语言课程设计 中国水利水电出版社,李珍香,刘红梅,赵润林编著。 附录将以下代码单独存为一个文件,后缀名为.asm在记事本中将下列代码粘贴,保存文件时将文件名写成 Mykcsj.asm.386.model flat,stdcalloption casemap:none; Include 文件定义;includewindows.incincludegdi32.incincludelibgdi32.libincludeuser32.incincludelibuser32.libincludekernel32.incincludelibkernel32.libincludeComdlg32.incincludelibComdlg32.libincludecomctl32.incincludelibcomctl32.lib; 数据段; Equ 等值定义;ICO_MAINequ1000hIDM_MAINequ2000hIDA_MAINequ2001h;-文件菜单项-IDM_NEWequ2101hIDM_OPENequ2102hIDM_SAVEequ2103hIDM_SAVEASequ2104hIDM_EXITequ2105h;-编辑菜单项-IDM_UNDOequ2201hIDM_REDOequ2202hIDM_COPYequ2203hIDM_CUTequ2204hIDM_PASTEequ2205hIDM_SELALLequ2206hIDM_FINDequ2207hIDM_REPLACEequ2208hIDM_FINDPREVequ2209hIDM_FINDNEXTequ2210h;-格式菜单项-IDM_FONTequ2301h;-查看菜单项-IDM_STATEequ2401h;-帮助菜单项-IDM_ABOUTequ2501hIDM_TOHELPequ2502h;-主菜单项目-IDM_FILEequ3100hIDM_EDITequ3200hIDM_FORMATequ3300hIDM_CHECKequ3400hIDM_HELPequ3500h.data?hInstancedd?hWinMaindd?hMenudd?hWinEditdd?hFiledd?hWinStatusdd?hIcoMaindd?hFindDialogdd?hReplaceDialogdd?dwBooleandd?szFileNamedbMAX_PATH dup (?)szBufferdb1024 dup (?)dwFontColordd?stLogFontLOGFONT;*; 查找替换对话框变量定义;*idFindMessagedd?stFindFINDREPLACEszFindTextdb100 dup (?)szReplaceTextdb100 dup (?).constFINDMSGSTRINGdbcommdlg_FindReplace,0szClassNamedbMyClass,0szCaptionMaindb记事本,0szCaptiondb提醒,0szCaption1db关于记事本,0szCaption2db帮助途径,0szMenuNamedb菜单栏,0szMenuFiledb文件(&F),0szMenuEditdb编辑(&I),0szMenuFormatdb格式,0szMenuCheckdb查看,0szMenuHelpdb帮助,0szFilterdbText Files(*.txt),0,*.txt,0,All Files(*.*),0,*.*,0,0szDefExtdbtxt,0szSaveCaptiondb亲,请输入保存的文件名,0szNewTitledb新建任务,0szDllEditdbRichEd20.dll,0szFontdb宋体,0szClassEditdbRichEdit20A,0szReplacedb替换,0szReplaceAlldb全部替换,0szFindNextdb查找下一个,0szNotFounddb字符串未找到哦亲!,0szNoNamedb起个名字吧亲,0szErrOpenFiledb无法打开文件哦亲!,0szTitleFormatdb记事本 - %s,0szErrCreateFiledb无法创建文件哦亲!,0szModifydb亲,文件已修改,要保存?,0szToHelpdb有问题?加qq*联系我,0szAboutdb淘宝版win32记事本,0; 代码段;.code;*;-Richedit的流操作_ProcStreamproc uses ebx edi esi _dwCookie,_lpBuffer,_dwBytes,_lpBytes.if_dwCookieinvokeReadFile,hFile,_lpBuffer,_dwBytes,_lpBytes,0.elseinvokeWriteFile,hFile,_lpBuffer,_dwBytes,_lpBytes,0.endifxoreax,eaxret_ProcStreamendp;*;-检查richEdit中的文本有无改变(允许继续操作则返回TRUE)设置菜单项的状态_SetStatusproclocalstRange:CHARRANGElocalszBuffer256:byte;-;-根据选择情况改变菜单项状态moveax,stRange.cpMin.ifeax =stRange.cpMaxinvokeEnableMenuItem,hMenu,IDM_COPY,MF_GRAYEDinvokeEnableMenuItem,hMenu,IDM_CUT,MF_GRAYED.elseinvokeEnableMenuItem,hMenu,IDM_COPY,MF_ENABLEDinvokeEnableMenuItem,hMenu,IDM_CUT,MF_ENABLED.endif;-invokeIsClipboardFormatAvailable,CF_TEXT.ifeaxinvokeEnableMenuItem,hMenu,IDM_PASTE,MF_ENABLED.elseinvokeEnableMenuItem,hMenu,IDM_PASTE,MF_GRAYED.endif;-invokeEnableMenuItem,hMenu,IDM_REDO,MF_ENABLEDinvokeEnableMenuItem,hMenu,IDM_UNDO,MF_ENABLEDinvokeEnableMenuItem,hMenu,IDM_SELALL,MF_ENABLEDinvokeEnableMenuItem,hMenu,IDM_STATE,MF_GRAYEDinvokeEnableMenuItem,hMenu,IDM_SAVE,MF_ENABLEDinvokeEnableMenuItem,hMenu,IDM_SAVE,MF_ENABLEDinvokeEnableMenuItem,hMenu,IDM_FINDNEXT,MF_ENABLEDinvokeEnableMenuItem,hMenu,IDM_FINDPREV,MF_ENABLEDret_SetStatusendp;*;-设置窗口的标题文字_SetCaptionproclocalszBuffer1024:byte.ifszFileNamemoveax,offset szFileName.elsemoveax,offset szNoName.endifinvokewsprintf,addr szBuffer,addr szTitleFormat,eaxinvokeSetWindowText,hWinMain,addr szBufferret_SetCaptionendp;*;-显示“打开文件”对话框_OpenFileproclocalstOF:OPENFILENAMElocalstES:EDITSTREAM;-初始化对话框内容invokeRtlZeroMemory,addr stOF,sizeof stOFmovstOF.lStructSize,sizeof stOF;结构的长度pushhWinMainpopstOF.hwndOwner;所属窗口为主窗口movstOF.lpstrFilter,offset szFilter;打开文件的格式,文件筛选字符串movstOF.lpstrFile,offset szFileName;全路径的文件名缓冲区movstOF.nMaxFile,MAX_PATH;缓冲区的长度movstOF.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST;只能选择一个路径存在的文件invokeGetOpenFileName,addr stOF;-;-创建文件.ifeaxinvokeCreateFile,addr szFileName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0.ifeax =INVALID_HANDLE_VALUEinvokeMessageBox,hWinMain,addr szErrOpenFile,NULL,MB_OK or MB_ICONSTOPret.endifpusheax.ifhFileinvokeCloseHandle,hFile.endifpopeaxmovhFile,eax;-;-读入文件movstES.dwCookie,TRUEmovstES.dwError,NULL;流操作没有错误movstES.pfnCallback,offset _ProcStreaminvokeSendMessage,hWinEdit,EM_STREAMIN,SF_TEXT,addr stESinvokeSendMessage,hWinEdit,EM_SETMODIFY,FALSE,0;文件可编辑call_SetCaptioncall_SetStatus.endifret_OpenFileendp;-;-保存文件,如果没有打开或创建文件则调用“另存为”子程序_SaveFileproclocalstES:EDITSTREAM.if! hFilecall_SaveAs.if! eaxret.endif.endifinvokeSetFilePointer,hFile,0,0,FILE_BEGIN;在一个文件中设置当前的读写位置invokeSetEndOfFile,hFile;将当前文件位置设为文件末尾movstES.dwCookie,FALSEmovstES.dwError,NULLmovstES.pfnCallback,offset _ProcStreaminvokeSendMessage,hWinEdit,EM_STREAMOUT,SF_TEXT,addr stESinvokeSendMessage,hWinEdit,EM_SETMODIFY,FALSE,0moveax,TRUEret_SaveFileendp;*;-另存为_SaveAsproclocalstOF:OPENFILENAMElocalstES:EDITSTREAM;-;-初始化另存为对话框的内容invokeRtlZeroMemory,addr stOF,sizeof stOFmovstOF.lStructSize,sizeof stOFpushhWinMainpopstOF.hwndOwnermovstOF.lpstrFilter,offset szFiltermovstOF.lpstrFile,offset szFileNamemovstOF.nMaxFile,MAX_PATHmovstOF.Flags,OFN_PATHMUSTEXIST;用户输入文件名时,路径必须存在movstOF.lpstrDefExt,offset szDefExt;默认扩展名movstOF.lpstrTitle,offset szSaveCaption;对话框标题invokeGetSaveFileName,addr stOF;-;-创建新文件.ifeaxinvokeCreateFile,addr szFileName,GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0.ifeax !=INVALID_HAND
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年房屋租赁合同(CF-2000-0601)
- 2025年供热合同终止原因供热采暖(面积计费)合同协议
- 2025年仓储物流服务保证合同协议
- 国考行测题库结构附参考答案详解【b卷】
- 焊工国考题库带答案详解(模拟题)
- 2025年新能源汽车动力电池回收利用产业链现状与挑战报告
- 2025年辽宁省葫芦岛市专业技术继续教育公需科目考试及答案
- 历史隋唐时期试卷及答案
- 2025年乡村全科执业助理医师考试实践试题及答案
- 2025年初中湖南历史试卷及答案
- 2025江苏苏州市姑苏区劳动人事争议仲裁院协理员招聘5人考试参考试题及答案解析
- 全面流程审计管理模板
- 2025学年第一学期高一年级10月六校联考英语试题卷
- 医院法律知识培训课件
- 国家电投广西核电社会招聘笔试题库
- 2025年士兵提干考试题及答案
- 湖南九校联盟2026届高三上学期9月第一次联考化学试题+答案
- JJG 693-2011可燃气体检测报警器
- 酒店用品设备采购投标方案(技术方案)
- YY 0299-2016医用超声耦合剂
- GB/T 9695.13-2009肉与肉制品钙含量测定
评论
0/150
提交评论