第9章 Windows编程基础.ppt_第1页
第9章 Windows编程基础.ppt_第2页
第9章 Windows编程基础.ppt_第3页
第9章 Windows编程基础.ppt_第4页
第9章 Windows编程基础.ppt_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 Windows编程基础,第 9 章 第 1 节 9.1 Windows 程序设计基本概念,1. Visual C+应用程序设计方法 (1)使用Windows提供的Windows API函数 Windows API是Windows系统和Windows应用程序间的标准程序接口,应用程序可以通过此接口访问系统 (2)使用Microsoft提供的MFC类库 MFC类库集成了大量已经预先定义好的类,用户可以根据编程的需要调用相应的类,或根据需要自定义有关的类。,2. Windows程序设计基本概念,(1) 窗口,窗口是应用程序与用户之间交互的接口环境。用户可以通过窗口输入数据,控制应用程序的运行

2、;应用程序可以通过窗口显示数据和状态。,(2) 对象与句柄,对象是指Windows的规范部件,包括各种窗口、菜单、按钮、对话框以及程序模块等。 句柄是指Windows使用的一个唯一的整数值,是一个4字节长的数值,用于标识应用程序中不同的对象和同类对象中不同的实例,诸如一个窗口、按钮、图标、滚动条、输出设备、控件或者文件等。应用程序通过句柄能够访问相应的对象信息。表9-1列出常用的句柄。 表9-1 Windows常用句柄 句柄类型类型说明句柄类型类型名称HWND窗口句柄HBITMAP位图句柄HINSTANCE实例句柄HCURSOR光标句柄HDC当前设备环境句柄HICON图标句柄HFONT字体句柄

3、HMENU菜单句柄HPEN画笔句柄HFILE文件句柄HBRUSH画刷句柄,(3) 事件驱动,Windows应用程序以消息为基础,以事件驱动之。Windows应用程序启动之后将进入一个消息循环,等待系统或应用程序的消息,消息的产生是因为事件发生的结果,Windows程序设计主要围绕编写事件或消息的响应函数上。有关事件驱动的问题在下节中将有详细的讨论。,(4) 消息及其在Windows编程中的应用,Windows应用程序的运行是依靠事件来驱动,Windows应用程序不断等待(利用一个while循环),如果有事件发生,操作系统会以消息的形式传递给应用程序,应用程序会捕获相应的消息,然后响应消息(调用

4、相应的函数)。 系统传递给应用程序的消息数据是一个MSG结构体数据类型的数据。结构体MSG的定义如下: typedef struct tagMSG / 消息 HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG;,第 9 章 第 2 节 9.2 Windows 中的事件驱动,Windows应用程序以消息为基础,以事件驱动之。 事件驱动程序设计是围绕着消息的产生与处理而展开的。一条消息是关于发生的事件的信息。作为一个Windows程序员,其工作就是对正开发的应用程序所要发出或要接收的消息进

5、行排序和管理。 在Windows中事件产生的消息由系统传递给应用程序,应用程序必须有一个消息循环接收消息和处理相应的消息。消息循环的实现如下: MSG msg /定义一个MSG类型的变量 while (GetMessage ( /将消息传递给窗口函数,以便处理相应的消息 面向对象的程序设计方法更适合于Windows的事件驱动机制,因为面向对象将问题分解为一个或多个对象的处理,对象的属性和行为的处理不能使用顺序处理方式,比较适合这种根据用户要求处理问题的方法。,第 9 章 第 3 节 9.3 Windows 应用程序中常见消息,消息在Windows程序设计中是很关键的因素,在API程序设计方法中

6、要求熟练记忆常见消息,但是在MFC程序设计方法中只是要求了解这些消息的相关含义即可。,1. 鼠标消息,表9-3 常见的鼠标消息 鼠标消息名 说明 WM_LBUTTONDOWN 单击鼠标左键时产生的消息 WM_LBUTTONUP 放开鼠标左键时产生的消息 WM_RBUTTONDOWN 单击鼠标右键时产生的消息 WM_RBUTTONUP 放开鼠标右键时产生的消息 WM_LBUTTONDBCLK 双击鼠标左键时产生的消息 WM_RBUTTONDBCLK 双击鼠标右键时产生的消息,2. 键盘消息,(1) WM_KEYDOWN 这是在按下一个非系统键时产生的消息。此外相似的消息还有WM_KEYUP,它是

7、在放开非系统键时产生。 (2) WM_CHAR 这也是按下一个非系统键时产生的消息。,3. 关闭窗口消息,关闭窗口时产生的消息是WM_CLOSE。,4. 退出程序消息,退出程序时产生的消息是WM_QUIT,这是退出应用程序时由PostQuitMessage函数发出的消息。,5. 重画消息 这是一个十分重要的消息,当发生用户区移动或显示事件、用户窗口改变大小的事件以及程序通过滚动条滚动窗口时,均产生一条WM_PAINT消息。此外,当下拉式菜单关闭并需要恢复被覆盖的部分以及Windows清除对话框或消息框等对象,并需要恢复被覆盖的部分时,将产生WM_PAINT消息。,第 9 章 第 4 节 9.4

8、 API 及应用程序基本框架,1. Windows应用程序的组成,一个完整的Windows应用程序通常由五种类型的文件组成,见下表。 文件类型 扩展名 说明 C+源程序文件 .cpp或.c 头文件 .h 头文件包括源程序文件需要的外部常量、变量、数据结构和函数定义及其说明 模块定义文件 .def 模块定义文件定义程序模块的属性 资源描述文件 .rc 资源描述文件定义源程序使用的资源 工程文件 .mak 各种源程序文件编译后生成工程文件,经进一步编译后成为可执行文件,2. Windows API 应用程序实例,Windows应用程序的开始部分十分相似,下面通过一个实例的分析充分展示Windows

9、应用程序的各个部分。,【例9-1】简单窗口显示。,/头文件windows.h中包含应用程序中所需要的数据类型和数据结构的定义 #include /窗口函数说明 LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; /* 以下初始化窗口类 */ int WINAPI WinMain ( /WinMain函数 HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) static char szAppName = 示例 ; /窗口类名 HWND h

10、wnd ; /窗口句柄 MSG msg ; /Windows消息 WNDCLASSEX wndclass ; /窗口类,可以是WNDCLASS wndclass.cbSize = sizeof (wndclass) ; /窗口类数据大小 wndclass.style = CS_HREDRAW | CS_VREDRAW ; /窗口类型 wndclass.lpfnWndProc = WndProc ; /窗口处理函数为WndProc wndclass.cbClsExtra = 0 ; /窗口类无扩展 wndclass.cbWndExtra = 0 ; /窗口实例无扩展 wndclass.hInst

11、ance = hInstance ; /当前实例句柄 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; /窗口的最小化图标为默认图标 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; /窗口采用箭头光标 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ; /窗口背景为白色 wndclass.lpszMenuName = NULL ; /窗口无菜单 wndclass.lpszClassName = szAppName

12、 ; /窗口类名为“示例” wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ; /* 以下是对窗口类的注册 */ if(! RegisterClassEx ( 程序运行结果如右图所示。 例9-1的运行结果,3. Windows API 应用程序结构分析,Windows的应用程序具有相对固定的基本结构,其中由入口函数WinMain和窗口函数构成基本框架,并包含各种数据类型、数据结构与函数等。,1 WinMain函数,WinMain函数是所有Windows应用程序的入口,类似于C语言中的main函数,其功能是完成一系列的定义和初始化工作,并产

13、生消息循环。 WinMain函数有三个基本的组成部分:函数说明、初始化和消息循环。,(1) WinMain函数说明,int WINAPI WinMain ( HINSTANCE hInstance, /应用程序当前实例句柄 HINSTANCE hPrevInstance, /应用程序其他实例句柄 PSTR szCmdLine, /指向程序命令行参数的指针 int iCmdShow ) /应用程序开始执行时窗口显示方式的整数值,(2) 初始化,初始化包括窗口类的定义、注册、创建窗口实例和显示四个部分。 窗口类的定义 窗口类定义通过给窗口类数据结构WNDCLASS赋值完成,结构体类型WNDCLAS

14、S的定义如下: typedef struct tagWNDCLASS UINT style; /窗口类的样式,一般设置为0 WNDPROC lpfnWndProc; /指向窗口函数的指针 int cbClsExtra; /分配在窗口类结构后的字节数 int cbWndExtra; /分配在窗口实例后的字节数 HINSTANCE hInstance; /定义窗口类的应用程序的实例句柄 HICON hIcon; /窗口类的图标 HCURSOR hCursor; /窗口类的光标 HBRUSH hbrBackground; /窗口类的背景刷 LPCWSTR lpszMenuName; /窗口类的菜单名

15、 LPCWSTR lpszClassName; /窗口类名 WNDCLASS;, 注册窗口类,RegisterClass( /wndclass为窗口类结构, 创建窗口,创建一个窗口类的实例由函数CreatWindow( )实现,该函数的原形为: HWND CreateWindow( LPCTSTR lpClassName, / 窗口类名 LPCTSTR lpWindowName, / 窗口标题名称 DWORD dwStyle, / 窗口样式,常用窗口样式见表9-5 int x, / 窗口左上角横坐标 int y, / 窗口左上角纵坐标 int nWidth, / 窗口宽度 int nHeigh

16、t, / 窗口高度 HWND hWndParent, /该窗口的父窗口句柄 HMENU hMenu, / 窗口主菜单句柄 HANDLE hInstance, / 创建窗口的应用程序当前句柄 LPVOID lpParam / 指向一个传递给窗口的参数值的指针 );, 显示窗口,ShowWindow(hwnd,nCmdShow); UpdateWindow(hwnd); (3) 消息循环 MSG msg /定义一个MSG类型的变量 while (GetMessage ( /将消息传递给窗口函数,以便处理相应的消息 ,2 窗口函数,窗口函数是应用程序处理接收到的消息的函数,其中包含了应用程序对各种可能接收到的消息的处理过程。 窗口函数的一般形式如下: LRES

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论