windows窗口程序基础.ppt
《windows窗口程序基础.ppt》由会员分享,可在线阅读,更多相关《windows窗口程序基础.ppt(75页珍藏版)》请在三一办公上搜索。
1、Windows 应用程序基础,可视化开发系统集成了一系列系统可用资源和开发工具,一、Windows编程基础,采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程序,编写Windows程序相当一部分工作是在创建对象和为对象属性赋值,对象特征:具有规范形态和操作模式,API,API函数的功能,利用Windows API函数编写Windows应用程序必须首先了解以下内容:(1)窗口的概念(2)事件驱动的概念(3)句柄(4)消息,其它概念,图形设备接口GDI基于资源的程序设计
2、动态链接库KERNAL32.DLL存储器 任务 资源管理等windows核心功能 GDI32.DLL用户界面和图形绘制,包括位图 元文件 字体 设备描述表等 USER32.DLL窗口管理,包括消息 菜单 光标 计时器 以及其它与控制窗口显示相关的一些功能,一个应用程序的窗口一般包含下列组成部分:,1.窗口,编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,应用程序与用户之间交互的接口环境,系统管理应用程序的基本单位,Win应用程序基本的操作单元,Windows程序设计是针对事件或消息的处理进
3、行。,消息是描述事件发生的信息(如按下鼠标或键盘),事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式。,Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。,2.事件驱动,常用句柄类型及其说明,应用程序通过句柄访问相应的对象信息,HWND窗口句柄HDC设备环境句柄HBITMAP位图句柄HCURSOR光标句柄HICON图标句柄HFONT字体句柄HMENU菜单句柄HPEN画笔句柄HFILE文件句柄HBRUSH画刷句柄HINSTANCE当前实例句柄,3.句柄,Windows应用程序利用Windows消息(M
4、essage)与应用程序及系统进行信息交换。,typedef struct tagMSG HWND hwnd;窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam;包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam;DWORD time;指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置,其数据类型POINT也是一个结构体MSG;,附加信息与具体消息号的值有关,在Win中消息用结构体MSG表示,typedef struct tagPOINT L
5、ONG x;LONG y;POINT;,4.消息,VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:,BM表示按钮控制消息CB表示组合框控制消息DM表示默认下压式按钮控制消息EM表示编辑控制消息LB表示列表框控制消息SBM表示滚动条控制消息WM表示窗口消息,窗口管理消息初始化消息输入消息系统消息剪贴板消息控制处理消息控制通知消息滚动条通知消息非用户区消息MDI消息DDE消息应用程序自定义的消息,Windows编程常用消息,windows消息类型,在Windows中,消息有以下三种类型:(1)标准Windows消息:指以WM_为前缀的那些
6、消息(除了WM_COMMAND),如窗口移动消息WM_MOVE,窗口大小改变消息WM_SIZE,此外,如程序启动或退出,窗口创建和关闭等等。,(2)控件通知消息:由编辑框,列表框等控件或子窗口发给其父窗口的通知消息,以WM_COMMAND为消息名,在消息中包含有控件通知代码,以区分具体的控件通知消息。,(3)命令消息:命令消息也以WM_COMMAND为消息名,在消息中包含有命令的标识符(ID),以区分具体的命令。命令消息的来源是以下三种用户接口对象:菜单:用户选择某菜单项,要产生相应的命令消息。工具栏:用户按下某工具栏按钮产生相应的命令消息。加速键:用户在键盘上按下了定义的加速键也将产生相应的
7、命令消息。,其它自定义消息,其它自定义消息如网络消息,文件读写消息,其它外部设备状态消息等,Windows的消息系统是由3个部分组成的:消息队列。Windows能够为所有的应用程序维护一个消息队列。应用程序必须从消息队列中获取 消息,然后分派给某个窗口。消息循环。通过这个循环机制应用程序从消息队列中检索消息,再把它分派给适当的窗口,然 后继续从消息队列中检索下一条消息,再分派给适当的窗口,依次进行。窗口过程。每个窗口都有一个窗口过程来接收传递给窗口的消息,它的任务就是获取消息然后 响应它。窗口过程是一个回调函数;处理了一个消息后,它通常要返回一个值给Windows。,消息从产生响应的5个步骤,
8、1)系统中发生了某个事件。2)Windows把这个事件翻译为消息,然后把它放到消息队列中。3)应用程序从消息队列中接收到这个消息,把它存放在TMsg记录中。4)应用程序把消息传递给一个适当的窗口的窗口过程。5)窗口过程响应这个消息并进行处理。步骤3和4构成了应用程序的消息循环,Windows消息控制中心一般是三层结构,其顶端就是Windows内核。Windows内核维护着一个消息队列,第二级控制中心从这个消息队列中获取属于自己管辖的消息,后做出处理,有些消息直接处理掉,有些还要发送给下一级窗体(Window)或控件(Control)。第二级控制中心一般是各Windows应用程序的Applica
9、tion对象。第三级控制中心就是Windows窗体对象,每一个窗体都有一个默认的窗体过程,这个过程负责处理各种接收到的消息。,此外,相似的消息还有:WM_LBUTTONUP:放开鼠标左键时产生;WM_RBUTTONDOWN:单击鼠标右键时产生;WM_RBUTTONUP:放开鼠标右键时产生;WM_LBUTTONDBLCLK:双击鼠标左键时产生;WM_RBUTTONDBLCLK:双击鼠标右键时产生。,二、Windows应用程序常用消息1.WM_LBUTTONDOWN:产生单击鼠标左键的消息,系统键是指实现系统操作的组合键,例如Alt与某个功能键的组合以实现系统菜单操作等。,wParam 为按键的A
10、SCII码1Param 与WM_KEYDOWN的相同,wParam:按下键的虚拟键码,用以标识按下或释放的键1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。,相似的消息还有WM_KEYUP,在放开非系统键时产生,如F1的虚拟键码在Windows.h文件中定义为VK_F1,2.WM_KEYDOWN:按下一个非系统键时产生的消息3.WM_ CHAR:按下一个非系统键时产生的消息,wParam:未用1Param:包含一个指向CREATESTRUCT数据结构的指针,wParam和1Param均未用。,wParam和1Param均未用。,4.WM_CREATE:由CreateW
11、indow函数发出的消息5.WM_CLOSE:关闭窗口时产生的消息6.WM_DESTROY:由DestroyWiodow函数发出的消息,7.WM_QUIT:由PostQuitMessage函数发出的消息退出应用程序时发出的消息wParam:含退出代码,标识程序退出运行时的有关信息1Param:未用8.WM_PAINT,过程驱动方法计算平均成绩,事件驱动方法计算平均成绩,三、Windows中的事件驱动程序设计,Windows句柄,系统中对象的唯一标识,系统动态分配和维护,一个对象使用一个句柄,销毁后这个句柄值可能用来标识其它完全不同的一个句柄句柄类型有很多,如HWND,HBRUSH,HICON等
12、。,一个完整的Windows应用程序通常由五种类型的文件组成。,1.C语言源程序文件2.头文件3.模块定义文件4.资源描述文件5.项目文件,四、Windows应用程序组成及编程步骤 1.应用程序的组成,1.所有应用程序的入口,类似Main函数,2.完成一系列的定义和初始化,并产生消息循环,WinMain和WndProc是Windows应用程序的主体,2.源程序组成结构,(1)WinMain函数,三个基本的组成部分:函数说明、初始化和消息循环,WinMain函数,注意!Win是多任务管理的,同一应用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识,(
13、2)初始化,i.窗口类定义,通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:,WNDCLASS定义,typedef struct _WNDCLASS UINT style;WNDPROC lpfnWndProc;int cbClsExtra;int cbWndExtra;HINSTANCE hInstance;HICON hIcon;HCURSOR hCursor;HBRUSH hbrBackground;LPCTSTR lpszMenuName;LPCTSTR lpszClassName;WNDCLASS,*LPWNDCLASS,WND
14、CLASS结构,WNDCLASS是一个由系统支持的结构,用来储存某一类窗口的信息,如ClassStyle,消息处理函数,Icon,Cursor,背景Brush等。也就是说,CreateWindow只是将某个WNDCLASS定义的窗体变成实例。要得到某一窗口的WNDCLASS数据,可以用GetClassLong();RegisterClass()就是在系统注册某一类型的窗体。也就是将你提供的WNDCLASS数据注册为一个窗口类,在WNDCLASS.lpszClassName中定义该WNDCLASS的标识,无论CreateWindow或CreateWindowEx创建的窗口都必须对应一个WNDCL
15、ASS,但一个WNDCLASS可以有多个窗口对象。,WNDCLASS,有一些系统预定义的窗口类,如:ClassName=_T(BUTTON or COMBOBOX or EDIT or LISTBOX or MDICLIENT or SCROLLBAR or STATIC)要用这些窗体,直接用CreateWindow创建相应对象就是了。要得到某一窗口的窗口类,可以用GetClassName();WNDCLASS中的回调函数是窗体的消息处理函数:LRESULT CALLBACK WndProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam),分量解
16、释-style,style:指定类风格。这些风格可通过按位或操作组合起来。风格如下:CS_BYTEALIGNCLIENT:在字节边界上(在x方向上)定位窗口的用户区域的位置 CS_BYTEALIGNWINDOW:在字节边界上(在x方向上)定位窗口的位置 CS_CLASSDC:该窗口类的所有窗口实例都共享一个窗口类DC CS_DBLCLKS:允许向窗口发送双击鼠标键的消息 CS_GLOBALCLASS:当调用CreateWindow 或 CreateWindowEx 函数来创建窗口时允许它的hInstance参数和注册窗口类时传递给RegisterClass 的 hInstance参数不同。如果
17、不指定该风格,则这两个 hInstance 必须相同。CS_HREDRAW:当水平长度改变或移动窗口时,重画整个窗口 CS_NOCLOSE:禁止系统菜单的关闭选项 CS_OWNDC:给予每个窗口实例它本身的DC。注意,尽管这样是很方便,但它必须慎重使用,因为每个DC大约要占800个字节的内存。CS_PARENTDC:将子窗口的裁剪区域设置到父窗口的DC中去,这样子窗口便可以在父窗口上绘制自身。注意,这是子窗口还是从系统缓存中获取DC,而不是使用父窗口的DC。使用该风格可以提高系统性能。CS_SAVEBITS:以位图形式保存被该窗口遮挡的屏幕部分,这样当给窗口移动以后,系统便可以用该保存的位图恢
18、复屏幕移动的相应部分,从而系统不用向被该窗口遮挡的窗口发送 WM_PAINT 消息。该特性对于菜单类型的窗口比较合适,因为它通常是简短的显示一下之后便消失。设置该特性将增加显示该窗口的时间,因为它通常要先分配保存位图的内存。CS_VREDRAW:当垂直长度改变或移动窗口时,重画整个窗口,分量解释,lpfnWndProc:指向窗口过程 cbClsExtra:指定紧随在 WNDCLASS 数据结构后分配的字节数。系统将其初始化为零。cbWndExtra:指定紧随在窗口实例之后分配的字节数,系统将其初始化为零。如果应用程序正在用WNDCLASS结构注册一个在RC 资源描述文件中用CLASS指令创建的
19、对话框时,它必须设置这个字段为 DLGWINDOWEXTRA。hInstance:标识了该窗口类的窗口过程所在的模块实例的句柄,不能为NULL。hIcon:标识了该窗口类的图标。hIcon字段必须是一个图标的句柄;若hIcon字段为NULL,那么系统将提供一个默认的图标。hCursor:标识该窗口类的光标,hCursor必须是一个光标资源的句柄。若hCursor字段为NULL,则无论何时鼠标移到应用程序窗口时,应用程序必须显式设置光标形状。,LoadCursor的作用是在应用程序中加载一个窗口光标HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lp
20、CursorName),光标资源所在的模块句柄,NULL则使用系统预定义光标,光标资源名或系统预定义光标标识名,应用程序调用函数GetStockObject获取系统提供的背景刷HBRUSH GetStockObject(int nBrush);,hbrBackground:标识了该窗口类的背景画刷。hbrBackground字段必须是用于绘制背景的物理刷子的句柄,或者是一个颜色的值。如果给出一个颜色的值,它必须是下面列出的标准系统颜色之一(系统将对所选颜色加1)。如果给出了颜色值,它必须是转换成下列的HBRUSH类型之一的颜色:(备注)当hbrBackground字段为NULL时,每当需要绘制
21、其用户区域时,应用程序必须自己来绘制其背景。应用程序可以通过处理WM_ERASEBKGND 消息或检查由 BeginPaint 函数填写的 PAINTSTRUCT 结构的fErase 字段来确定背景什么时候需要着色。,分量解释,lpszMenuName:指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样。若使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏。如果lpszMenuName为NULL,那么该窗口类的窗口将没有默认菜单。lpszClassName:指向NULL结束的字符串,或者是一个原型(atom)。若该参数是一个原型,它必须是一个有先前调
22、用RegisterClass或者 RegisterClassEx函数产生的类原型。类原型必须作为lpszClassName的低字,高字必须为0.若lpszClassName是一个字符串,它描述了窗口类名。这个类名可以是由RegisterClass或RegisterClassEx注册的名字,或者是任何预定义的控件类名。,ii.注册窗口类,Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。RegisterClass(/wndclass为窗口类结构 RegisterClass函数的返回为布尔值,注册成功则返回
23、真,iii.创建窗口实例,创建一个窗口类的实例由函数CreateWindow()实现函数原型如下:HWND Create Window(LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle,窗口标题名 DWORD dwStyle,创建窗口的样式 int x,y,窗口左上角坐标 int nWidth,nHeight,窗口宽度和度高 HWND hwndParent,该窗口的父窗口句柄 HWENU hMenu,窗口主菜单句柄 HINSTANCE hInstance,创建窗口的应用程序当前句柄 LPVOID lpParam 指向一个传递给窗口的参数值的指针),iv显
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windows 窗口 程序 基础
链接地址:https://www.31ppt.com/p-6523745.html