Windows程序设计第2章.ppt
- 文档编号:1395870
- 上传时间:2022-10-22
- 格式:PPT
- 页数:37
- 大小:569.50KB
Windows程序设计第2章.ppt
《Windows程序设计第2章.ppt》由会员分享,可在线阅读,更多相关《Windows程序设计第2章.ppt(37页珍藏版)》请在冰豆网上搜索。
第二章基于API的Windows编程,内容提要,2.1Win32API基础2.2Win32API应用程序框架2.3Windows程序模型2.4句柄及其类型2.5消息及其在编程中的应用2.6用API编写Windows应用程序举例,2.1Win32API基础,2.1.1什么是APIAPI(ApplicationProgrammingInterface),即应用编程接口,是Windows操作系统和Windows应用程序间的标准程序接口。
API为应用程序提供了系统各种特殊函数及数据结构定义,Windows应用程序可以利用标准API函数来调用系统功能。
从Windows1.0以来,系统就提供了API函数的调用,随着系统升级,API函数在不断扩充,目前已有几千个,并且向后兼容。
Windows1.0到Windows3.1,API是基于16位体系结构的,称为Win16API。
WindowsNT到WindowsXP32-BitEdition、WindowsVistax32Edition,API是基于32位体系结构的,称为Win32API。
WindowsSever2003、WindowsXP64-BitEdition和WindowsVistax64Edition,API是基于64位体系结构的,称为Win64API,2.1Win32API基础,2.1.2API函数类型根据WindowsAPI函数完成的功能,可将其分为三类:
窗口管理函数,它主要实现窗口的创建、移动和修改功能;图形设备(GDI)函数,它主要实现与设备无关的图形操作功能;系统服务函数,它主要实现与操作系统有关的多种功能。
2.1Win32API基础,2.1.3为什么要学习API目前有许多编写Windows应用的开发工具,为什么还要学习基于API的Windows编程方法呢?
原因如下:
1.通过API编程,可以对Windows系统内部运行机制有更深入了解;2.使用C语言和API编写的程序,可执行代码量小,仅依赖于WinDLL;3.API是各种现有开发工具的基础。
几乎所有基于Windows平台的开发工具都用自己的语言对重要的API函数进行了重新编写和封装,以提供对这一功能的支持。
因此学习API,有助于在其他开发工具中更好地理解和利用API函数。
4.API函数直接针对Windows的底层,对于开发工具中不具备的功能,可以通过直接调用API函数来实现。
2.2Win32API应用程序框架,2.2.1实例利用API函数编写一个Windows应用程序。
要求:
窗口显示字符串“这是一个基于API的Windows应用程序!
”。
窗口的标题栏显示“窗口示例程序”当按下键盘的任意一个键时,窗口显示的文本领色将随机地发生改变。
2.2Win32API应用程序框架,2.2.2程序源代码#includeLRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);/窗口函数说明/-以下初始化窗口类-intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdshow)/WinMain函数说明HWNDhwnd;MSGMsg;WNDCLASSwndclass;charlpszClassName=窗口示例;/窗口类名charlpszTitle=窗口示例程序;/窗口标题名/-窗口类的定义-wndclass.style=0;/窗口类型为默认类型wndclass.lpfnWndProc=WndProc;/窗口处理函数为WndProcwndclass.cbClsExtra=0;/窗口类无扩展wndclass.cbWndExtra=0;/窗口实例无扩展wndclass.hInstance=hInstance;/当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/使用用默认图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);/窗口采用箭头光标wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);/窗口背景为白色wndclass.lpszMenuName=NULL;/窗口中无菜单wndclass.lpszClassName=lpszClassName;/窗口类名为“窗口示例”,1,2.2Win32API应用程序框架,/-以下进行窗口类的注册-if(!
RegisterClass(/程序终止时将信息返回系统,2,2.2Win32API应用程序框架,/-窗口函数-LRESULTCALLBACKWndProc(HWNDhwnd,UINTmessage,WPARAMwParam,LPARAMlParam)RECTrect;HDChdc;PAINTSTRUCTps;staticintuRed=0,uGreen=0,uBlue=0;LPCTSTRstr=这是一个基于API的Windows应用程序;switch(message)caseWM_PAINT:
hdc=BeginPaint(hwnd,3,2.2Win32API应用程序框架,2.2.3代码分析程序由三部分组成:
头文件、函数WinMain()和WndProc()。
1.头文件:
#include2.WinMain()函数是所有Windows应用程序的入口,类似C语言中的main函数;
(1)WinMain函数实现以下功能:
注册窗口类,建立窗口及执行其他必要的初始化工作;进入消息循环,根据从应用程序消息队列接受的消息,调用相应的处理过程;消息循环是整个程序运行的核心。
当消息循环检索到WM_QUIT消息时终止程序运行。
2.2Win32API应用程序框架,
(2)WinMain函数的组成有三个基本组成部分:
函数说明、初始化和消息循环。
函数说明:
WinMain函数的说明如下:
intWINAPIWinMain(HINSTANCEhInstance,/应用程序当前实例句柄HINSTANCEhPrevInst,/其他实例句柄,为兼容早期LPSTRlpszCmdLine,/指向程序命令行参数的指针intnCmdShow/程序执行时窗口显示方式(最大、正常、最小、隐藏等)/WINAPI是个宏,一般代表_stdcall调用约定,不写的话编译器缺省认为_cdecl/_stdcall调用约定:
压栈顺序为从右至左,清栈由被调用函数负责。
/_cdecl调用约定:
压栈顺序为从右至左,清栈由函数调用者负责。
2.2Win32API应用程序框架,初始化初始化包括窗口类的定义、注册、创建窗口实例和显示窗口四部分。
窗口类定义:
通过给窗口类数据结构WNDCLASS赋值完成;注册窗口:
RegisterClass(&wndclass);创建窗口实例:
由函数CreateWindow()实现;窗口类的显示:
由ShowWindow()和UpdateWindow()函数实现。
2.2Win32API应用程序框架,消息循环Windows应用程序的运行以消息为核心。
Windows将产生的消息放入应用程序的消息队列中,而应用程序WinMain函数的消息循环提取队列中的消息,并将其传递给窗口函数的相应过程处理。
消息循环的常见格式如下:
MSGMsg;while(GetMessage(Msg,NULL,0,0)TranslateMessage(Msg);DispatchMessage(Msg);,2.2Win32API应用程序框架,3窗口消息处理函数WndProc()窗口函数的主体是消息处理语句,由一系列case语句组成。
程序员只需根据窗口可能收到的消息,在case语句中编写相应的处理程序段即可。
2.3Windows程序模型,Windows应用程序采用了基于事件驱动的程序模型。
过程驱动模型,事件驱动模型,Windows应用程序流程,Windows的消息机制,2.4句柄及其类型,句柄:
句柄(handle)是Windows编程的基础,它是一个4字节长的整数值,用于标识应用程序中不同的对象和同类对象中不同的实例,诸如一个窗口、按钮、图标、滚动条、输出设备、控件或文件等对象,都需要一个唯一的句柄来标识,应用程序通过句柄来访问相应的对象信息。
句柄的类型:
在Windows应用程序中,句柄的使用是很频繁的,常用句柄类型如下表所示。
2.5消息及其在编程中的应用,事件驱动围绕着消息的产生与处理展开,一条消息是关于发生的事件的消息。
事件驱动是靠消息循环机制来实现的。
1.消息:
是一种报告有关事件发生的通知。
在Windows中消息用一个数据结构来表示。
2.消息的种类:
(1)输入消息:
包括键盘和鼠标的输入。
(2)控制消息:
用来与Windows的控制对象,如列表框、按钮、检查框等进行双向通信。
(3)系统消息:
对程序化的事件或系统时钟中断作出反应。
(4)用户消息:
这是程序员自己定义并在应用程序中主动发出的,一般由应用程序的某一部分内部处理。
2.5消息及其在编程中的应用,3.消息的组成Windows中消息主要由三部分组成:
消息号、字参数和长字参数。
(1)消息号由事先定义好的消息名标识;
(2)字参数(wParam)和长字参数(lParam)用于提供消息的附加信息,附加信息的含义与具体消息号的值有关。
在Windows中消息往往用一个结构体MSG来表示,结构体MSG的定义如下:
typedefstructtagMSGHWNDhwnd;/获取消息的窗口句柄UINTmessage;/消息号,每个Windows消息都有一个消息号WPARAMwParam;/提供消息的附加信息LPARAMlParam;/提供消息的附加信息DWORDtime;/指定消息发送至队列的时间POINTpt;/指定消息发送时,屏幕光标的位置MSG;,2.5消息及其在编程中的应用,4.Windows常用消息的宏定义为了便于识别消息,用事先定义的宏来表示消息,不同类属的消息具有不同的宏前缀。
宏前缀:
BM按钮控制消息(ButtonMessage);如BM_CLICKCB组合框控制消息(CombineBox);如CB_SHOWDROPDOWNDM默认下压式按钮控制消息(DefaultMessage);如DM_REPOSITIONEM编辑控制消息(EditMessage);如EM_GETLINELB列表框控制消息(ListBox);如LB_GETCOUNTSBM滚动条控制消息(ScrollBarMessage);如SBM_SETRANGEWM窗口消息(WindowMessage)。
如WM_CREATE,2.6用API编写Windows应用程序举例,例一:
如2.2.1利用API函数编写一个Windows应用程序。
要求:
窗口的第一行上显示“这是一个基于API的Windows应用程序!
”。
窗口的标题栏显示“窗口示例程序”当按下键盘的任意一个键时,窗口显示的文本领色将随机地发生改变。
2.6用API编写Windows应用程序举例,关于WM_PAINT消息Windows在两种情况下会向窗口发送WM_PAINT消息1.首次创建窗口后,Windows将发送WM_PAINT消息到窗口过程,实现窗口客户区的绘制。
2.在特定的窗口被其它窗口覆盖的情况下,上面的窗口移动或关闭时,下面被覆盖的窗口就会出现“空洞”。
这个“空洞”是一块无效的用户区域。
像改变窗口尺寸后,客户区的部分内容被遮盖,窗口最小化、客户区的滚动等都会造成无效的客户区域,为重新显示无效客户区域,Windows会发送WM_PAINT消息到窗口过程,以重新绘制下面的窗口。
除此之外,InvalidateRect,Inval
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Windows 程序设计