Windows程序设计初步.ppt

上传人:sh****n 文档编号:12561826 上传时间:2020-05-11 格式:PPT 页数:58 大小:414.31KB
返回 下载 相关 举报
Windows程序设计初步.ppt_第1页
第1页 / 共58页
Windows程序设计初步.ppt_第2页
第2页 / 共58页
Windows程序设计初步.ppt_第3页
第3页 / 共58页
点击查看更多>>
资源描述
Windows程序设计初步,一.Windows系统的特征,标准的用户界面多任务设备独立性动态链接强大的内存管理,二.基本术语,窗口(window)由句柄唯一标识对话框(Dialog)人机交互图标(Icon)代表某项操作或程序的图符位图(Bitmap)用位模式形成的图像菜单(Menu)命令工具栏(ToolBar)常用的菜单项状态栏(StateBar)操作状态或操作提示,二.基本术语(续),句柄:用来标识资源的32位无符号整数HANDLE一般句柄HINSTANCE实例句柄HWND窗口句柄HMENU菜单句柄HICON图标句柄HCURSOR光标句柄HBITMAP位图句柄,三.Windows编程的特点,1.消息驱动体系DOS编程方式属过程驱动。Windows编程方式属消息驱动(程序的工作是产生消息,传递消息和处理消息)。,事件,事件是对计算机操作的动作。每个事件对应一个消息,即每个事件发生的效果是产生消息。,消息,消息的功能:(1)帮助Windows实现多任务(2)通知应用程序某一事件已经发生,各应用程序给予响应,消息的表示,消息本身内容UINTmessage32位无符号整数附加信息WPARAMwParamLPARAMlParam,消息的定义,typedefstructtagMSGHWNDhwnd;/接收窗口UINTmessage;/消息标识WPARAMwParam;/附加LPARAMlParam;/附加DWORDtime;/入队时间POINTpt;/光标位置MSG;/vcincludewtypes.h,消息的种类vcincludewinuser.h,标准Windows消息除WM_COMMAND外,所有以WM_为前缀的消息,由窗口和视图处理。控制消息由控件和子窗口发给父窗口的消息。命令消息来自用户接口对象。如:菜单、工具条和加速键等。,标准的Windows消息可以分为三类,即键盘消息、鼠标消息和窗口消息。下面分别加以说明。键盘消息当键盘的某个键被按下时,将产生WM_CHAR消息,这个消息带有字符代码值、重复次数和先前状态码三个参数。WM_CHAR消息的处理函数为OnChar(),此函数的原型为:afx_msgvoidOnchar(UINTnChar,UINTnRepCnt,UINTnFlags);其中:nChar是所按键的字符代码值;nRepCnt是重复的次数,它表示用户按键时重复击键的次数;nFlags表示扫描码、先前键状态和键转换状态等,其参数值功能描述见表4.1所示。,表1nFlags参数值功能描述,鼠标消息在Windows中处理鼠标的操作基本上有三种:单击(Click)2.双击(DoubleClick)3.拖动(Drag)所有这些鼠标的操作,都会产生相应的消息。鼠标移动时产生WM_MOUSEMOVE消息,鼠标左键按下时产生WM_LBUTTONDOWN消息,鼠标右键按下时产生WM_RBUTTONDOWN消息,鼠标左键双击时产生WM_LBOTTONDBLCLK消息等等。所有这些鼠标消息的处理函数都有相似的原型,它们都有两个参数。我们以处理鼠标左键按下的消息函数OnLButtonDown()为例来进行说明。此函数的原型如下:afx_msgvoidOnLButtonDown(UINTnFlags,Cpointpoint);其中:参数point是鼠标事件发生时鼠标光标所在的位置,它是相对于窗口左上角的水平坐标和垂直坐标而言的。,参数nFlag指明鼠标按钮的状态以及鼠标事件发生时键盘上某些键的状态,每一状态都可以由nFlag的一位来表示。我们可以从表4.2中所列的位屏蔽中得到每一位。4.2nFlags参数每位的含义其中,MK_CONTROL、MK_LBUTTON、MK_MBUTTON、MK_MBUTTON、MK_RBUTTON和MK_SHIFT都是预定义的宏。,窗口消息所有窗口的变化,包括窗口内容重绘WM_PAINT、窗口最大化WM_MAXIMIZE、窗口最小化WM_MINIMIZE、窗口重定义大小WM_RESIZE、窗口滚动WM_HSCROLL、WM_VSCROLL、窗口定时WM_TIMER等消息所带参数各不相同。在这里我们来详细讨论一下WM_PAINT消息。当调用成员函数UpdateWindow()或RedrawWindow()要求重新绘制窗口内容时,应用程序将收到WM_PAINT消息。当窗口最小化后再还原或被其他窗口遮盖后又重新显示时,则当前窗口中的内容必须重新绘制,消息WM_PAINT就是为实现这个功能的。,当向Windows应用程序发送WM_PAINT消息,应用程序检索到此消息后,就重新显示窗口中的内容。WM_PAINT消息的处理函数为OnPaint()。函数原型为:afx_msgvoidOnPaint();如果想详细了解所有的标准的Windows消息,可以参阅VisualC+6.0联机帮助中的有关内容。4.4.2控件消息控件是一个小的子窗口,属于其他窗口(如对话框等),能够接受操作并象父窗口发送消息。常见的控件有按钮、列表框、编辑框、复合框、滚动条等。在VisualC+6.0中,对控件的操作都是通过生成相应的控件类来进行。这些控件类仅能发送少量特定的消息,这些消息就叫做控件消息。发送控件消息的控件在VisualC+中,使用唯一ID号来进行标识,使用控件类来操纵。控件消息分为两类:1.从控件传给消息,通常这类消息的前缀的最后一个字符为N;2.由系统发送给控件的消息,这类消息的前缀的最后一个字符为M。例如,当用户对编辑框中的文本进行修改时,编辑框将发送给父窗口一条包含控件通知码EN_CHANGE的WM_COMMAND消息。窗口的消息处理函数将以某种适当的方式对通知消息作出响应,如检索编辑框中的文本。与其他标准的Windows消息一样,控件消息也是由窗口对象和视图对象进行处理。,命令消息命令消息主要包括由用户界面对象发送的M_COMMAND消息,用户界面对象是指菜单、工具栏、快捷键等。它和控件消息的区别在于:控件消息只能由特定控件向Windows系统传送,而命令消息是由用户界面发送的,它可以被更多的对象处理。在文档对象、视图对象、窗体对象、控件对象中都能处理这种消息。1.用户界面对象菜单、工具栏、快捷键等都是可以产生命令的用户界面对象。每个这样的对象都分配了一个ID号,通过给对象和命令分配同一个ID号,将用户界面对象和命令联系在一起。例如,选择程序中的【文件】菜单下的【打开】菜单项,则产生一条ID_FILE_OPEN命令,然后通过消息映射调用函数OnFileOpen()来进行处理。,2.命令ID在MFC编程中,命令完全由命令ID来进行描述,命令ID分配给产生此命令的用户界面对象。通常情况下,命令ID是由它所表示的用户界面对象的功能来命名的。MFC预定义了一些命令ID,如ID_EDIT_CUT、ID_FILE_SAVE等,而其他命令ID则要由编程人员自己定义。3.命令目标当用户界面对象被单击后,将调用处理函数来执行所产生的命令。Windows把非命令消息的消息直接发送给窗口,窗口中用于处理这些消息的处理函数将被调用。而对于命令消息,将把命令发送给多个目标,也就是命令目标,其中通常有一个要调用此命令的处理函数。,消息的产生,用户产生消息Windows本身产生消息应用程序本身产生消息其他应用程序产生消息,消息的传递,Windows系统有一个存放消息的队列,每个应用程序也有一个消息队列。Windows系统先将收到的消息存放在系统队列中;然后再分发到相应的应用程序队列中。应用程序则从自身的队列中获取消息并进行处理。,事件,事件,事件,系统消息队列,应用程序队列,应用程序队列,应用程序队列,应用程序,应用程序,应用程序,消息的处理,每个窗口对应一个窗口函数,负责处理该窗口的所有消息.窗口函数具有4个参数:HWND型窗口句柄UINT型消息内容WPARAM型附加信息LPARAM型附加信息,2.窗口,通常每个Windows应用程序至少对应一个窗口,每个窗口都要有一个窗口函数负责处理该窗口内所发生的事件。,3.Windows应用程序接口,(ApplicationProgrammingInterface)API是由Windows操作系统提供的函数定义、参数定义和消息格式的集合。可供应用程序使用。,API分类,窗口管理接口函数图形设备接口函数系统服务接口函数,三种编程方法,基于C语言和SDK工具:直接使用API,易于理解工作原理。基于C+和MFC类库:以基本类库作为应用程序的接口。基于Appwizard的程序设计环境,即自动生成应用程序框架。,什么叫SDK?当微软每次推出一个重要的Windows版本,一般都会同时推出一个SDK(SoftwareDevelopmentKit),SDK中包括开发该版本Windows所需要的函数和常数定义、API函数说明文档、相关的工具和示例。SDK一般都使用C语言,但不包括编译器。SDK可以在微软的站点下载,也可以在MSDN专业版和企业版的光盘中找到。安装SDK后,使用VC+编写和编译程序就可以了。VC+中包括了SDK中的所有头文件、帮助、示例和工具,所以如果你使用的是VC+,你一般就不需要SDK了。只有当你的VC+版本比较低,如你使用的是VC+5.0,而想利用Win98中提供的新功能时,才需要安装SDK。从Windows98起,WindowsSDK叫PlatformSDK。PlatformSDK包括最新的WindowsAPI(如Windows2000的新函数)的有关声明、例子,值得下载。,4.命名规则,函数命名规则函数名=动词+名词动词和名词的第一个字母必须大写例GetMessage变量命名规则小写字母前缀表示变量的类型,其余的部分描述变量的功能例nCount,数据类型定义Win32变量名BOOLint32位符号数bOkINTint32位符号数nCountUINTunsignedint32位无符号数uMsgLONGlong32位符号数lTotalSize,四.Windows应用程序结构,至少包含两个函数:WinMain():必有且仅有一个。窗口函数:每个窗口对应一个窗口函数,以响应该窗口的消息。,WinMain()函数需完成的功能,定义窗口类注册窗口类建立窗口类的窗口显示窗口运行消息循环,WinMain()函数的原型,intWINAPIWinMain(HINSTANCEhThisInst,/当前实例HINSTANCEhPrevInst,/前一个实例PSTRpszCmdLine,/指向命令行指针intnCmdShow)/显示方式,窗口类WNDCLASS,UINTstyle;/窗口类风格WNDPROClpfnWndProc;/窗口函数intcbWndExtra;/窗口额外信息intcbClsExtra;/类结构额外信息HINSTANCEhInstance;/实例句柄,窗口类WNDCLASS,HICONhIcon;/图标句柄HCURSORhCursor;/光标句柄HBRUSHhbrBackground;/窗口背景画刷句柄LPCSTRlpszMenuName;/主菜单资源句柄LPCSTRlpszClassName/窗口类名字,hCursor加载函数,HCURSORLoadCursor(HINSTANCEhInst,LPCSTRlpszName)hInst:鼠标光标所在的模块lpszName:鼠标光标名字,注册窗口类,ATOMRegisterClass(CONSTWNDCLASS*lpWClass)功能:登记窗口类返回:窗口类的唯一值参数:窗口类地址,创建窗口,HWNDCreateWindow(LPCSTRlpClassName,/窗口类名LPCSTRlpWinName,/标题DWORDdwstyle,/风格intx,inty,/位置,创建窗口,intnWidth,intnHeight,/窗口长宽HWNDhParent,/父窗口句柄HMENUhMenu,/菜单HINSTANCEhThisInst,/实例LPVOIDlpszAdditional)/附加信息,窗口显示函数,BOOLShowWindow(HWNDhwnd,intnCmdShow)功能:显示或隐藏窗口返回值:可见状态:返回非零;隐藏状态:返回零nCmdShow可取的值:SW_HIDE删除窗口SW_MINIMIZ极小化成一个图标SW_MAXIMIZE极大化成一个图标SW_RESTORE恢复成正常窗口,更新用户区域,BOOLUpdateWindow(HWNDhwnd)返回:更新成功返回真参数:窗口句柄,获取消息,BOOLGetMessage(LPMSGlpMsg,/存放消息HWNDhwnd,/获取该窗口的消息,若为NULL,则获取该应用程序的所有消息UINTuMsgMin,/消息范围UINTuMsgMax);遇WM_QUIT消息为零,BOOLTranslateMessage(LPMSGlpMsg)功能:将虚拟键消息转换成字符消息BOOLDispatchMessage(LPMSGlpMsg)功能:驱动Windows,把消息传递给相应的窗口函数。,窗口函数,窗口函数负责处理从系统接收的输入消息和窗口管理消息。它由Windows直接调用。,PostQuitMessage(nExitCode)功能:发送WM_QUIT消息给系统,以通知系统应用程序要结束DefWindowProc(hwnd,message,wParam,lParam)消息缺省处理函数,例1利用MFCAppwizard创建Windows应用程序,在C+中,事物之间的关系是通过类的派生和类的成员函数的重载来反映的。而在VisualC+6.0中,类同样是最重要的元素。如一个字符串可以是类Cstring的对象,一个窗口可以是类CWnd的对象,一个对话框可以是类Cdialog的对象等等。VisualC+6.0中的MFCAppWizard(应用程序向导)可以使用户自动生成一些常用的标准程序结构和编程风格。例如一般的Windows应用程序结构、DLL应用程序结构、单文档(SDI)应用程序结构、多文档(MDI)应用程序结构等。,下面详细介绍利用MFCAppWizard创建一个Windows应用程序的步骤:第零步启动VisualC+6.0,选择【File】菜单下的【New】菜单项,选择【Projects】标签,选择【MFCAppWizard(exe)】项目类型,在【Projectname】中输入,项目名MyExp,定位于“D:temp”文件夹中,单击【OK】按钮。第一步选择【Singledocument】应用类型,即单文档应用程序,其他使用默认值,单击【Next】按钮。第二步让用户选择程序中是否加入数据库支持,在此使用默认值【None】,单击【Next】按钮。第三步让用户选择在程序中加入复合文档,自动化或ActiveX控件的支持,在此使用默认值,单击【Next】按钮。第四步让用户选择应用程序的一些特性,在此使用默认值,单击【Next】按钮。第五步让用户选择应用程序主窗口的风格、在源文件中是否加入注释、使用怎样的MFC类库,在此使用默认值,单击【Next】按钮。,第六步用户可以对MFCAppWizard提供的缺省类名、基类名、头文件名、源文件名进行修改,使用默认值,单击【Finish】按钮。则会显示出用户在前面几个步骤中作出的选择内容,单击【OK】按钮,系统开始创建应用程序,并回到VisualC+6.0的主界面。运行过的应用程序MyExp可以脱离VisualC+6.0单独运行,运行该文档可以双击“D:tempDebug”下的MyExp.exe文件。和所有的Windows应用程序一样,MyExp也包含标题栏、菜单栏、工具栏、状态栏等窗口元素。,MFC应用程序的类和文件,例1类说明AppWiZard在生成应用程序时,共派生了5个类单击“MyExpclasses”左侧的“+”展开所有的类,即可显示出应用程序MyExp的5个类,其中:CAboutDlg:关于About对话框的对话框类CMainFrame:主框架窗口类CMyExpApp:应用程序类CMyExpDoc:文档类CMyExpView:视图类在工程中,每个类都拥有自己的类定义文件(*.H)和类实现文件(*.CPP)。类定义文件主要保存各种类的定义;类实现文件主要保存各种类的成员函数的实现代码。,下面分别对这5个类进行说明:关于About对话框的对话框类CAboutDlgCAboutDlg是工程MyExp的对话框类,它是由MFC类库中的CDialog类派生而来的。主框架窗口类CMainFrameCMainFrame是工程MyExp的主框架窗口类,它的基类是CFrameWnd。头文件为MainFrm.h,实现文件为MainFrm.cpp。主框架窗口类用于管理主程序的窗口,来显示窗口的标题栏、工具栏、状态栏等;同时还处理对窗口操作的消息,例如窗口最大化、最小化、改变窗口大小等一般操作。视图窗口是主框架窗口的子集,对于多文档界面(MDI)应用程序,主框架窗口是所有MDI子窗口的容器。,应用程序类CMyExpAppCMyExpApp是工程MyExp的应用程序类,它的基类是CWinApp。头文件为MyExp.h,实现文件为MyExp.cpp。应用程序类管理程序的整体,控制应用程序的所有对象,包括文档、视图和边框窗口,并完成应用程序的初始化工作和程序退出时的清除工作。注意:每个基于MFC的应用程序都必须有一个从CWinApp类派生的对象。文档类CMyExpDocCMyExpDoc是工程MyExp的文档类,它的基类是CDocument。头文件为MyExpDoc.h,实现文件为MyExpDoc.cpp。,文档类负责存放程序的数据并读取磁盘文件数据,或将磁盘文件数据写入磁盘文件中。文档类必须通过视图类实现与用户的交互。视图类CMyExpViewCMyExpView是工程MyExp的视图类,它的基类是CView。头文件为MyExpView.h,实现文件为MyExpView.cpp。视图类主要负责管理视图窗口,显示文档类中的数据,可以显示在屏幕上,也可以输出到打印机或其他设备上;也负责处理用户数据,接受用户对数据的鼠标、键盘操作并传送给文档类对象。,例1文件说明AppWizard在自动生成工程时,除了生成上面介绍的各个类的头文件和实现文件外,还生成了一些为建立应用程序所需要的其他文件。这些文件可以在应用程序生成时指定的路径(E:C+EXAMPLEMyExp)中找到,下面分别对这些文件加以说明:1.MyExp.clw:ClassWizard的信息存储文件,存储由ClassWizard编辑已有的类或添加新类的信息,存储由ClassWizard建立和编辑各种消息处理函数和映射变量等的信息。2.MyExp.dsp:Project文件,即工程文件。Project文件中保存着工程的各种信息,一个工程文件对应一个工程应用程序。,3.MyExp.dsw:Workspace文件。一个Workspace文件可包含一个或多个工程。4.MyExp.rc:资源定义文件,包含程序资源的定义,其中保存了应用程序中使用到的各种资源的信息,包括存贮在文件夹中的图标、位图和光标等。5.Resource.h:标准的头文件,它包含了所有资源符号的定义,与MyExp.rc文件相对应。6.StdAfx.h:包含在所有AppWizard程序中的标准头文件,它用于包含其他包含在预编译头文件中文件。7.StdAfx.cpp:包含在所有AppWizard程序中,它包含所有标准include文件。8.resMyExpDoc.ico:文件中包含了打开文档时所用的图标文件。,9.resMyExp.rc2:资源定义文件,包含了用vc不能直接编辑的资源。可以将所有不能由资源编辑器编辑的资源放置到这个文件中。10.resMyExp.ico:应用程序的图标文件。应用程序图标包含在资源文件MyExp.rc中。11.resToolbar.bmp:用于创建工具栏按钮的位图文件。初始栏工具栏和状态栏是在主边框窗口类中构造的。12.ReadMe.txt:包含了对所有该程序的文件的解释信息,并说明了所有创建的类。另外,如果在AppWizard的第4步中选择了Context_sensitiveHelp选项,则AppWizard会自动生成一个.hpj文件和一些.rtf文件,它们用以给出上下文的帮助。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!