


单击以编辑,母版标题样式,单击以编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第,10,章,Windows,应用程序基础,1,程序调试工具,包括源程序语法检查、可执行程序修改和运行监视等,应用程序,Help,和,Setup,开发工具包,系统函数库和系统函数开发工具,资源管理器,包括图形化窗口及组成元素的多种对象的编辑器,可选择并构成具体语句或源程序结构的例程库及,Help,源程序编辑器和编译器,可视化开发,系统集成了一系,列系统可用资源,和开发工具,一、,Windows,编程基础,2,采用交互式方法时,可视化开发平台给出了许多选用的,对象,,程序员可选择所需,对象,并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的,应用程序,Windows,的,程序设计语言,VC,VB,VJ,都是“面向,对象,”,的程序设计语言,对象,是,Windows,的规范部件,窗口,菜单,按钮,对话框,程序模块,编写,Windows,程序相当一部分工,作是在创建,对象,和,为,对象,属性赋值,对象,特征:具有规范形态和操作模式,编程方法,传统编写法,-,API,交互式方法,-,MFC,3,API,API,函数,的功能,为应用程序,提供,Windows,系统,特殊函数,及,数据结构,Win,应用程序,可以利用标准大量,API,函数调用系统功能,是,Win,系统,与,Win,应用程序,间的,标准程序接口,窗口管理函数,实现窗口的创建、移动和修改功能,系统服务函数,:实现与操作系统有关的多种功能,图形设备,(,GDI),函数,:实现与设备无关的图形操作功能,4,利用,Windows,API,函数编写,Windows,应用程序,必须首先了解以下内容:,(1),窗口的概念,(2),事件驱动的概念,(3),句柄,(4),消息,5,(1),窗口,一个应用程序的窗口一般包含下列成分:,窗口边界,工作区,控制菜单框,下拉菜单,水平滚动条,垂直滚动条,最大化按钮,最小化按钮,标题栏,6,编写一个,Windows,应用程序,首先应创建一个或多个窗口,随后应用程序的运行过程即是,窗口内部,、,窗口与窗口,之间,、,窗口与系统,之间进行,数据处理与数据交换,的过程。
应用程,序与用,户之间,交互的,接口环,境,系统管理,应用程序,的基本单位,Win,应用程序,基本的操作单元,7,Windows,程序设计是针对,事件,或,消息,的处理进行,消息,是描述事,件发生的信息,(,如按下鼠标或键盘,),事件驱动,编程方法对于编写,交互式程序,很有用处,它避免了死板的操作模式,Windows,程序,的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的,消息,驱动的,但是,消息,的产生往往并不要求有次序之分2),事件驱动,8,常用句柄类型及其说明,句柄,是一个,4,字节长的数值,用于标识应用程序中不同的,对象,和,同类对象中不同的实例,窗口,按钮,图标,滚动条,输出设备,控制,文件,(3),句柄,应用程序通过,句柄,访问相应,的对象信息,HWND,窗口句柄,HDC,设备环境句柄,HBITMAP,位图句柄,HCURSOR,光标句柄,HICON,图标句柄,HFONT,字体句柄,HMENU,菜单句柄,HPEN,画笔句柄,HFILE,文件句柄,HBRUSH,画刷句柄,HINSTANCE,当前实例句柄,9,Windows,应用程序,利用,Windows,消息,(Message),与应用程序及系统进行信息交换。
typedef,struct,tagMSG,HWND,hwnd,;,窗口句柄,为,null,,,则可检索所有驻留在消息队列中的消息,UINT message;,消息值,由,Windows.h,头文件中的宏定义来标识,WPARAM,wParam,;,包含有关消息的附加信息,不同消息其值有所不同,LPARAM,lParam,;,DWORD time;,指定消息送至队列的时间,POINT pt;,指定消息发送时屏幕光标的位置,其数据类型,POINT,也是一个结构体,MSG;,消息号:由事先定义好的消息名标识,字参数,(,wParam,),:,用于提供消息的,附加信息,长字参数,(,lParam,),:,用于提供消息的,附加信息,消息,附加信息,与具体,消息号的值有关,,在,Win,中消息用,结构体,MSG,表示,typedef,struct,tagPOINT,LONG x,;,LONG y;,POINT,;,(4),消息,10,(4),消息,VC,中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:,BM,表示按钮控制消息,CB,表示组合框控制消息,DM,表示默认下压式按钮控制消息,EM,表示编辑控制消息,LB,表示列表框控制消息,SBM,表示滚动条控制消息,WM,表示窗口消息,窗口管理消息,初始化消息,输入消息,系统消息,剪贴板消息,控制处理消息,控制通知消息,滚动条通知消息,非用户区消息,MDI,消息,DDE,消息,应用程序自定义的消息,Windows,编,程,常用消息,11,二、,Windows,应用程序常用消息,1.WM_LBUTTONDOWN,:,产生单击鼠标左键的消息,此外,相似的消息还有:,WM_LBUTTONUP,:,放开鼠标左键时产生;,WM_RBUTTONDOWN,:,单击鼠标右键时产生;,WM_RBUTTONUP,:,放开鼠标右键时产生;,WM_LBUTTONDBLCLK,:,双击鼠标左键时产生;,WM_RBUTTONDBLCLK,:,双击鼠标右键时产生。
1Param,高字节,包含当前光标的,Y,坐标,值,低字节,包含当前光标的,X,坐标,值,wParam,包含一整数值以标识鼠标键的,按下状态,MK_LBUTTON,按下鼠标左键,MK_MBUTTON,按下鼠标中键,MK_RBUTTON,按下鼠标右键,12,2.WM_KEYDOWN,:,按下一个,非系统键,时产生的消息,系统键,是指实现系统操作的组合键,例如,Alt,与某个功能键的组合以实现系统菜单操作等3.WM_ CHAR,:,按下一个,非系统键,时产生的消息,wParam,为,按键的,ASCII,码,1Param,与,WM_KEYDOWN,的相同,wParam,:,按下键的,虚拟键码,,用以标识按下或释放的键,1Param,:,记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息相似的消息还有,WM_KEYUP,在放开非系统键时产生,如,F1,的虚拟键码,在,Windows.h,文,件中定义为,VK_F1,13,4.WM_CREATE,:,由,CreateWindow,函数发出的消息,wParam,:,未用,1Param,:,包含一个指向,CREATESTRUCT,数据结构的指针,5.WM_CLOSE,:,关闭窗口时产生的消息,wParam,和,1Param,均未用。
6.WM_DESTROY:,由,DestroyWindow,函数发出的消息,wParam,和,1Param,均未用14,7.WM_QUIT,:,由,PostQuitMessage,函数发出的消息,退出应用程序时发出的消息,wParam,:,含退出代码,标识程序退出运行时的有关信息,1Param,:,未用,8.WM_PAINT,用户区移动或显示,用户窗口改变大小,程序通过滚动条滚动窗口,下拉式菜单关闭并需要恢复被覆盖的部分,Windows,清除对话框等对象,并需要恢复被覆盖的部分,均产生,WM_PAINT,消息,15,三、,Windows,中的事件驱动程序设计,启动,输入姓名,输入第一次测试成绩,输入第二次测试成绩,输入第三次测试成绩,计算平均成绩,结束,过程驱动,方法计算平均成绩,启动,消息处理,结束,输入姓名,输入第一次成绩,输入第二次成绩,输入第三次成绩,计算平均成绩,事件驱动,方法计算平均成绩,16,四、,Windows,应用程序组成及编程步骤,1.,应用程序的组成,一个完整的,Windows,应用程序,通常由,五种类型,的文件组成,1.C,语言源程序文件,2.,头文件,3.,模块定义文件,4.,资源描述文件,5.,项目文件,17,2.,源程序组成结构,入口函数,WinMain,窗口函数,WndProc,Windows,应用程序,构成基,本框架,包含各种数据类型、数据结构与函数等,1.,所有应用程序的入口,类似,Main,函数,,2.,完成一系列的定义和初始化,并产生消息循环,WinMain,和,WinProc,是,Windows,应用程序的主体,18,(1),WinMain,函数,三个基本的组成部分,:,函数说明,、,初始化,和,消息循环,功能,注册窗口类,建立窗口及执行必要的初始化,进入消息循环,据接受的消息调用相应的处理过程,当消息循环检索到,WM_QUIT,时终止程序运行,WinMain,函数,WinMain,函数说明,WinMain,函数的说明如下:,int,WINAPI,WinMain,(,HINSTANCE,hThisInst,应用程序当前实例句柄,HINSTANCe,hPrevInst,应用程序其他实例句柄,LPSTR,lpszCmdLine,指向程序命令行参数的指针,Int,nCmdShow,应用程序开始执行时窗口显示方式的整数值标识,),注意!,Win,是多任务管理的,同一应用程序的多个窗口可能会同时存,Win,系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识,19,(2),初始化,(a),窗口类定义,通过给窗口类数据结构,WNDCLASS,赋值完成,该数据结构中包含窗口类的各种属性。
窗口类定义常用以下函数:,LoadIcon,的作用是在应用程序中加载一个窗口图标其原型为:,HICON,LoadIcon(HINSTANCE,hInstance,LPCTSTR,lpIconName,),图标资源名或系统预定义图标标识名,图标资源所在的模块句柄,,NULL,则使用系统预定义图标,初始化,显示窗口,创建窗口实例,窗口类的注册:窗口类必须先注册后使用,窗口类的定义:定义窗口的形式与功能,LoadIcon,LoadCursor,GetStockObject,RegisterClass,CreateWindow,ShowWindow,,,UpdateWindow,20,LoadCursor,的作用是在应用程序中加载一个窗口光标,HCURSOR,LoadCursor(HINSTANCE,hInstance,LPCTSTR,lpCursorName,),光标资源所在的模,块句柄,,NULL,则使,用系统预定义光标,光标资源名或系统,预定义光标标识名,应用程序调用函数,GetStockObject,获取系统提供的背景刷,HBRUSH,GetStockObject(int,nBrush,);,21,(b),注册窗口类,Win,系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。
窗口类的注册由函数,RegisterClass,(),实现RegisterClass(&wndclass,);,/,wndclass,为窗口类结构,RegisterClass,函数的返回为,布尔值,,注册成功则返回,真,22,(c),创建窗口实例,创建一个窗口类的实例由函数,CreateWindow,(),实现,函数原型如下:,HWND Create Window,(,LPCTSTR,lpszClassName,窗口类名,LPCTSTR,lpszTitle,窗口标题名,DWORD,dwStyle,创建窗口的样式,int,x,y,窗口左上角坐标,int,nWidth,nHeight,窗口宽度和度高,HWND,hwndParent,该窗口的父窗口句柄,HWENU,hMenu,窗口主菜单句柄,HINSTANCE,hInstance,创建窗口的应用程序当前句柄,LPVOID。