




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学号:201201011367程序名称:便捷记事本程序设计说明书学院:计算机电子信息工程学院班级: 12级信息管理与信息系统姓名:佐佐一前言 Windows操作系统是由微软公司开发的视窗操作系统,是目前世界上用户最多且兼容性最好的操作系统,windows软件自然也是大势所趋,因此我们大家学习windows编程设计能够深化对它的认识,有助于大家更好的学习windows编程。 本次程序设计试验是在我校专业微机三室采用windowsXP操作系统的微机进行试验,编程工具是 Microsoft Visual C+ 6.0(完整绿色版)在 windowsXP操作系统上具有很好的兼容性,试验结果准确可靠 。本程序是我半年来学习windows编程在老师的指导下写的一款常用的小程序记事本。为了考察我们这学期的window程序编程能力和对课程的考察,老师通过考察课的形式检验我们.此次考察课老师让我们编写一款windows小程序并上交程序设计说明书.以下是我的这个程序的设计说明.二设计目的 使学生综合使用所学过的windows程序设计知识,掌握windows程序设计的基本结构思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的windows程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。而且使同学们能够熟练地利用MSDN查找在程序中遇到的API函数和消息等。熟悉在Visual C+ 6.0 中编辑、编译、调试和运行一个实际窗口式应用程序的步骤和方法。理解并掌握VC+的API编程步骤与方法,能进行简单的Windows程序设计提高实际动手能力。三总体设计描述1 建立一个编辑窗口,能进行文本的输入与删除操作。2 完成基本的编辑功能(复制、剪切、粘贴、撤销、删除、全选)。3 完成文件的读写操作(新建、打开、保存、另存为、退出)。4 形成完整的windows应用小程序-便捷记事本。四功能模块划分 1主函数 主函数模块里主要有三步一、注册窗口类;二、建立窗口,显示窗 口,更新刷窗口;三、消息循环。在注册窗口类里窗口属性窗口样式是 水平、垂直可调;用wndclass.lpfnWndProc =WndProc指向窗口函数, 将二者联系起来;将图标、鼠标、背景颜色画刷、菜单名载入窗口类并 且填入窗口类名。注册完窗口类后下面是根据窗口类创建窗口然后显示 窗口和刷新窗口。完成前面的操作后最后一步进行消息循环。 2窗口函数 在窗口模块里主要是定义了窗口的样式:子窗口、窗口可见、有水 平垂直滚动条、有边框、编辑样式是左对齐、多行、水平自然滚动、垂直 自然滚动,及定义所见窗口的位置及尺寸。还有所见窗口的代号和编辑窗 口的ID和指向实例的指针。虽然在窗口定义窗口的位置尺寸但是真实的 尺寸在WM_SIZE分支中由Move Window来确定。 3按消息细化模块功能 (1)首先进行初始化(2)用WM_CREATE创建编辑窗口,使窗口可以输入文本。(3)用WM_SETFOCUS使编辑控制项获得输入焦点。(4)用WM_SIZE使编辑窗口实现移动的功能。(5)用WM_COMMAND向窗口函数发送消息。(6)文件菜单中操作功能: 用IDM_FILE_NEW实现新建一个新文本文件功能 用IDM_FILE_OPEN实现从电脑中打开一个文本文件的操作。 用IDM_FILE_SAVE实现对已经操作完成的文件进行保存。 用IDM_FILE_SAVE_AS实现对默认路径打开的文件进行另存为。 用IDM_FILE_PRINT实现对文件在打印机的打印功能。 用IDM_EDIT_EXIT实现退出及时本的作用。 (7)编辑菜单中的中操作功能: 用 IDM_EDIT_UNDO实现对文本操作的撤销。 用 IDM_EDIT_CUT实现对文本的剪贴操作。 用 IDM_EDIT_COPY实现对文本的复制操作。 用 IDM_EDIT_PASTE实现对文本的粘贴操作。 用 IDM_EDIT_CLEAR实现对文本清除操作。 用 IDM_EDIT_SELECT_ALL实现对文本全选操作。 (8)菜单栏上的帮助和关于功能: IDM_HELP_HELP实现帮助操作,用IDM_APP_ABOUT实现关于操作。(9)用WM_CLOSE进行关闭窗口消息的处理。 (10)用WM_QUERYENDSESSION询问是否结束程序的窗口消息。(11)用WM_DESTROY实现销毁窗口操作。 五功能模块描述与实现 1主函数模块的实现(1)注册主窗口类, 定义一个WNDCLASS结构变量wndcls 按主窗口属性填写wndcls各成员 用RegisterClass注册窗口类 (2)建立、显示、刷新主窗口 用CreateWindow函数建立编辑窗口 用ShowWindow显示窗口 用UpdateWindow更新窗口(3)建立应用程序的消息循环用GetMessage函数表达式作为while循环的条件在循环体内调用TranslateMessage产生字符消息在循环体内调用DispatchMessage分发消息消息2编辑窗口模块 (1)初始化编辑窗口 编辑窗口获得输入焦点( WM_SETFOCUS) 编辑窗口的移动(WM_SIZE) 向编辑窗口发送消息(WM_COMMAND) (2)菜单操作 文件菜单 新建:当打开文件为空时用SetWindowText函数改变指定窗口 的标题栏的文本内容,新建立一个文本文档。 打开:用ZeroMemory宏用0来填充一块内存区域,然后用 GetFileLen获取文件长度,用GetOpenFileName获得打 开文件的名称并且指向打开的文件名,用Fopen打开文 件,用Free释放空间。 保存:先判断文件是否为空,若不为空直接保存文件 另存为:用ZeroMemory宏用0来填充一块内存区域,然后用 GetFileLen获取文件长度,用GetSaveFileName获得 保存文件的名称并且指向保存的文件名,用Fclose 关闭文件,用Free释放空间。 退出:用SendMessage函数将指定的消息发送到一个窗口,销 毁编辑窗口。 编辑菜单 撤消:用SendMessage函数将撤消消息发送到编辑窗口。 剪贴:用SendMessage函数将剪贴消息发送到编辑窗口。 复制:用SendMessage函数将复制消息发送到编辑窗口。 粘贴:用SendMessage函数将粘贴消息发送到编辑窗口。 删除:用SendMessage函数将删除消息发送到编辑窗口。 全选:用SendMessage函数将全选消息发送到编辑窗口。 帮助和关于菜单 用MessageBox分别显示版主和关于信息的消息方块。 3作用窗口函数模块 初始化,窗口初建时(WM_CRETAE)。 关闭窗口的处理。 询问是否结束程序窗口的处理。 清理全局或静态对象,窗口销毁时(WM_DESTROY)。 六心得体会从这次windows程序设计实验中,我深刻的认识到可视化编程与控制台编程之间的区别,win32编程并不是编写windows程序的唯一方法,但却是最基本最重要的方法。WindowsAPI写出的应用程序具有最佳的性能、最强大的功能和最大的灵活性,而且生成的执行文件相对较小,所以对于像我一样的编程初学者说,更应该深入认真地学习win32 编程,提高自己的编程技能和增加自己的编程经验,为以后学习其他的编程语言奠定基础。 附件A:程序主要函数原型和简要功能说明(1) WinMain函数原型是:int WINAPI WinMain (HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) 函数的功能是:被系统调用,作为一个32位应用程序的入口点。WinMain函数应初始化应用程序,显示主窗口,进入一个消息接收一发送循环,这个循环是应用程序执行的其余部分的顶级控制结构。(2) CreateWindow函数原型是;HWND CreateWindow(LPCTSTR lpClassName,LPCTSTR lpWindowName,DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HANDLE hInstance, LPVOID lpParam);函数的功能是:创建一个交叠的、弹出的或者子窗口。它指定窗口类、窗口标题、窗口风格以及窗口初始化时的位置和大小(可选的)。它也指定了窗口的父窗口或者所有者,还可以指定窗口的菜单。(3) ShowWindow函数原型是:BOOL ShowWindow( HWND hWnd, int nCmdShow );函数功能是:该函数设置指定窗口的显示状态。(4) UpdateWindow函数原型是:BOOL UpdateWindow( HWND hWnd );函数功能是:它先判断客户区是否为空,不空 UpdateWindow 不执行,为空才执行重画。(5) GetMessage函数原型是:BOOL GetMessage(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax );函数功能是:该函数从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收一定范围的消息值。GetMessage不接收属于其他线程或应用程序的消息。(6) TranslateMessage函数原型是:BOOL TranslateMessage(CONST MSG *lpMsg );函数功能是:该函数将虚拟键消息转换为字符消息,(Windows 对所有键盘编码都是采用虚拟键的定义,这样当按键按下时,并不得到字符消息,需要键盘映射转换为字符的消息),字符消息被函数DispatchMessage() 函数寄送到调用线程的消息队列里, 当下一次线程调用函数GetMessage() 或 PeekMessage() 时被读出。(7) DispatchMessage函数原型是:LONG DispatchMessage( CONST MSG *lpmsg );函数功能是:该函数分发一个消息给窗口程序。通常消息从GetMessage函数获得。消息被分发到回调函数(过程函数),作用是消息传递给操作系统,然后操作系统去调用我们的回调函数,也就是说我们在窗体的过程函数中处理消息。(8) PostQuitMessage函数原型是:VOID PostQuitMessage( int nExitCode );函数功能是:该函数向系统表明有个线程有终止请求。通常用来响应WM_DESTROY消息。(9) SetWindowText函数原型是:BOOL SetWindowText( HWND hWnd, LPCTSTR lpString );函数功能是:该函数改变指定窗口的标题栏的文本内容(如果窗口有标题栏)。如果指定窗口是一个控件,则改变控件的文本内容。然而,SetWindowText函数不改变其他应用程序中的控件的文本内容。(10) MessageBox函数原型是:int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType );函数功能是:该函数创建、显示、和操作一个消息框。消息框含有应用程序定义的消息和标题,加上预定义图标与Push(下按)按钮的任何组合。(11) SendMessage函数原型是:LRESULT SendMessage(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );函数功能是:该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的消息队列后就立即返回。(12) MoveWindow函数原型是:BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint );函数功能是:改变指定窗口的位置和大小.对顶窗口来说,位置和大小取决于屏幕的左上角;对子窗口来说,位置和大小取决于父窗口客户区的左上角.对于Owned窗口,位置和大小取决于屏幕左上角。(13)DestroyWindow函数原型是:BOOL DestroyWindow(HWND hWnd );函数功能是:毁指定的窗口。这个函数通过发送WM_DESTROY 消息和 WM_NCDESTROY 消息使窗口无效并移除其键盘焦点。这个函数还销毁窗口的菜单,清空线程的消息队列,销毁与窗口过程相关的定时器,解除窗口对剪贴板的拥有权,打断剪贴板器的查看链。 附录B:程序主要功能代码#include#includeresource.h#includeafxres.h#includewinuser.h#define ID_EDIT 1#includestdio.hLRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;BOOL PutFileContent(LPCTSTR lpFileName,HWND hwndEdit);TCHAR szAppName = TEXT(提示);int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow)static TCHAR szAppName = TEXT (写字板-帅) ;HWND hwnd ;MSG msg ;WNDCLASS wndclass ;wndclass.style =CS_HREDRAW | CS_VREDRAW ;wndclass.lpfnWndProc =WndProc ;wndclass.cbClsExtra =0 ;wndclass.cbWndExtra =0 ;wndclass.hInstance =hInstance ;wndclass.hIcon =LoadIcon(hInstance,(LPCTSTR)IDI_ICON);wndclass.hCursor =LoadCursor(hInstance,(LPCTSTR)IDC_CURSOR);wndclass.hbrBackground =(HBRUSH) GetStockObject (BLACK_BRUSH) ;wndclass.lpszMenuName =szAppName ;wndclass.lpszClassName =szAppName ;if (!RegisterClass(&wndclass)MessageBox (NULL, TEXT (本程序要求Windows NT以上!),szAppName, MB_ICONERROR) ;return 0 ;hwnd = CreateWindow( szAppName, szAppName, WS_OVERLAPPEDWINDOW, GetSystemMetrics(SM_CXSCREEN)/4, GetSystemMetrics(SM_CYSCREEN)/4, GetSystemMetrics(SM_CXSCREEN)/2, GetSystemMetrics(SM_CYSCREEN)/2, NULL, NULL, hInstance, NULL ); ShowWindow (hwnd, iCmdShow) ; UpdateWindow(hwnd); while (GetMessage(&msg,NULL,0,0)TranslateMessage(&msg) ;DispatchMessage(&msg) ;return msg.wParam ;AskConfirmation(HWND hwnd) return MessageBox(hwnd,TEXT(欢迎您下次使用!), szAppName, MB_YESNO | MB_ICONQUESTION);unsigned int GetFileLen(FILE* pf)rewind(pf);unsigned int len = 0;char buf1001;while(!feof(pf)len += fread(buf,1,1000,pf);rewind(pf);return len;BOOL PutFileContent(LPCTSTR lpFileName,HWND hwndEdit)unsigned int len = SendMessage(hwndEdit,WM_GETTEXTLENGTH,0,0);FILE* pf = fopen(lpFileName,wb);if(!pf) return FALSE;char* buf = (char*)malloc(len);SendMessage(hwndEdit,WM_GETTEXT,len,(LPARAM)buf);len = fwrite(buf,len,1,pf);fclose(pf);free(buf);if( len != 1)return FALSE;return TRUE;LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam) static HWNDhwndEdit;static OPENFILENAME of;static charfilenameMAX_PATH;static FILE* pf;static charszCurFileNameMAX_PATH=0; switch(message) case WM_CREATE: hwndEdit = CreateWindow(TEXT(edit),WS_CHILD | WS_VISIBLE | WS_HSCROLL |WS_VSCROLL |WS_BORDER | ES_LEFT | ES_MULTILINE | ES_AUTOHSCROLL | ES_AUTOVSCROLL,0,0,0,0,hwnd,(HMENU) ID_EDIT,(LPCREATESTRUCT) lParam) - hInstance,NULL); return 0; case WM_SETFOCUS: SetFocus( hwndEdit); return 0; case WM_SIZE: MoveWindow(hwndEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE); return 0; case WM_COMMAND:if(lParam)if(LOWORD(wParam) = ID_EDIT&(HIWORD(wParam) = EN_ERRSPACE|HIWORD(wParam) = EN_MAXTEXT)MessageBox(hwnd,TEXT(Edit control out of space。),szAppName,MB_OK|MB_ICONSTOP);return 0;elseswitch(LOWORD(wParam)case IDM_FILE_NEW:SetWindowText(hwndEdit,);szCurFileName0=0;SetWindowText(hwndEdit,NULL);break; case IDM_FILE_OPEN:ZeroMemory(&of,sizeof(of);of.lStructSize = sizeof(OPENFILENAME); of.hwndOwner = hwnd; of.lpstrFile = filename; of.nMaxFile = MAX_PATH; of.lpstrFilter = text0*.txt0All0*.*0; of.nFilterIndex = 1;if(!GetOpenFileName(&of) break;pf = fopen(filename,r);long len = GetFileLen(pf);void * buf = malloc(len);fread(buf,len,1,pf);SetWindowText(hwndEdit,(LPCTSTR)buf);free(buf); SetWindowText(hwnd,filename);break; case IDM_FILE_SAVE: if(szCurFileName0 != 0) PutFileContent(szCurFileName,hwndEdit);break; case IDM_FILE_SAVE_AS:ZeroMemory(&of,sizeof(of);of.lStructSize = sizeof(OPENFILENAME); of.hwndOwner = hwnd; of.lpstrFile = filename; of.nMaxFile = MAX_PATH; of.lpstrDefExt=txt; of.lpstrFilter = text0*.txt0All0*.*0bmp0*.bmp0; of.nFilterIndex = 1; of.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY ;if(!GetSaveFileName(&of) break;long len = GetWindowTextLength(hwndEdit);void *buf = malloc(len);GetWindowText(hwndEdit,(LPTSTR)buf,len);pf = fo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学前教育与发展心理学考试题及答案
- 2025年心理应用与咨询实践考试试卷及答案
- 2025年心理健康教育师考试题及答案
- 2025年现代通信技术基础与应用考试卷及答案
- 2025年人工智能的发展与应用知识试卷及答案
- 2025年酒店管理执业资格考试试题及答案
- 2025年机械设计及制造专业考试试卷及答案
- 2025年国际关系与外交专业考研真题试题及答案
- 2025年广告学专业知识考试试卷及答案
- 2025年高级项目经理职业资格考试试卷及答案
- 2025天津市龙网科技发展有限公司招聘9人笔试参考题库附带答案详解
- 2024年甘肃省西部计划真题
- 2024北京重点校八年级(下)期末道德与法治汇编:人民当家作主章节综合
- 国家开放大学2025年《创业基础》形考任务2答案
- 《农村基层干部廉洁履行职责规定》解读与培训
- 最新中职烹饪原料加工技术模拟试题一
- 商业发票模板(INVOICE)
- 培训:医患沟通技巧
- 超星尔雅学习通《创业基础》2020章节测试答案
- 基于Verilog的数字密码锁设计
- (完整版)三年级数学学业测评方案、总结
评论
0/150
提交评论