篇Windows编程基础.ppt

上传人:max****ui 文档编号:14940126 上传时间:2020-08-02 格式:PPT 页数:69 大小:223KB
收藏 版权申诉 举报 下载
篇Windows编程基础.ppt_第1页
第1页 / 共69页
篇Windows编程基础.ppt_第2页
第2页 / 共69页
篇Windows编程基础.ppt_第3页
第3页 / 共69页
资源描述:

《篇Windows编程基础.ppt》由会员分享,可在线阅读,更多相关《篇Windows编程基础.ppt(69页珍藏版)》请在装配图网上搜索。

1、下篇 Windows编程基础,华北电力大学 电子商务教研室 王钇,第一章 Windows 编程基础,Windows 编程基础知识 Windows应用程序常用消息 Windows中的事件驱动程序设计 Windows应用程序组成及编程步骤 应用程序举例,Windows 编程基础知识,Microsoft Windows是一个应用于微机的具有图形化用户界面的操作系统,它为应用程序提供了一个由一致的窗口和菜单结构构成的多任务环境。 目前的Windows应用软件开发平台大多是“可视的(Visual)”,是一个集成了系统的可用资源和开发工具的综合性开发平台。,Windows 编程基础知识,系统的可用资源和开

2、发工具包括: Windows语言的源程序编辑器和编译器 程序调试工具,包括源程序语法检查、可执行程序修改和运行监视等 系统函数库和系统函数开发工具 资源管理器,包括图形化窗口及组成元素的多种对象的编辑器 可选择并构成具体语句或源程序结构的例程库及Help 应用程序Help和Setup开发工具包,Windows 编程基础知识,Windows的程序设计语言,包括Visual C+、Visual Basic、Visual Java等,都是“面向对象(object-oriented)”的程序设计语言。 Windows编程中,“对象(object)”是指Windows的规范部件,包括各种窗口、菜单、按钮

3、、对话框及程序模块等。 编写Windows程序相当一部分工作是在创建对象和为对象属性赋值。,Windows 编程基础知识,Windows的特点 图形化的窗口界面 多任务方式的运行环境 虚拟化的设备接口 以虚拟内存为核心的内存管理 网络功能及应用程序 多媒体功能及应用程序 功能丰富的用户管理工具和实用软件,Windows 编程基础知识,Visual C+开发面向对象应用程序的两种主要方法: 使用Windows提供的Windows API函数 使用Microsoft提供的MFC类库,Windows 编程基础知识,API是应用程序编程接口(Application Programming Interf

4、ace)的缩写。 是Windows系统与Windows应用程序间的标准程序接口 为应用程序提供Windows系统特殊函数及数据结构 Windows应用程序可以利用标准大量API函数调用系统功能,Windows 编程基础知识,Windows API的功能 窗口管理函数实现窗口的创建、移动和修改功能 图形设备(GDI)函数:实现与设备无关的图形操作功能 系统服务函数:实现与操作系统有关的多种功能,Windows 编程基础知识,MFC(Microsoft Foundation Class)类库集成了大量已经预先定义好的类,用户可以根据编程的需要调用相应的类,或根据需要定义有关的类。 采用交互式方法时

5、,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程序,Windows 编程基础知识,利用Windows API函数编写Windows应用程序必须首先了解以下内容: 窗口的概念 事件驱动的概念 句柄 消息,窗口,窗口Windows应用程序基本的操作单元,是应用程序与用户之间交互的接口环境,也是系统管理应用程序的基本单位。 编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,一个基本的

6、Windows应用程序窗口,事件驱动,Windows程序设计是针对事件或消息的处理进行 消息是描述事件发生的信息(如按下鼠标或键盘) Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。,事件驱动,事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式,使得用户可以按照自己的意愿采用灵活多变的操作方式。,句柄,句柄(handle)是整个Windows编程的基础。 句柄是一个4字节长的数值,用于标识应用程序中不同的对象和同类对象中不同的实例,如窗口、按钮、图标、滚动条、输出设备、控制或者文件等。 应用程序通过

7、句柄访问相应的对象信息。,句柄,常用句柄类型及其说明,HWND窗口句柄HDC设备环境句柄 HBITMAP位图句柄HCURSOR光标句柄 HICON图标句柄HFONT字体句柄 HMENU菜单句柄HPEN画笔句柄 HFILE文件句柄HBRUSH画刷句柄 HINSTANCE当前实例句柄,消息,Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。 消息的组成 消息号:由事先定义好的消息名标识 字参数(wParam) 和长字参数(lParam) :用于提供消息的附加信息,附加信息的含义与具体消息号的值有关,消息,在Windows中,消息用一个结构体MSG表示:,t

8、ypedef struct tagMSG HWND hwnd;窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam;包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam; DWORD time; 指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置, 其数据类型POINT是一个结构体 MSG;,typedef struct tagPOINT LONG x; LONG y; POINT;,消息,VC中存在几种系统定义的消息分类,不同的前缀符号经常用于

9、消息宏识别消息附属的分类,系统定义的消息宏前缀如下: BM表示按钮控制消息 CB表示组合框控制消息 DM表示默认下压式按钮控制消息 EM表示编辑控制消息 LB表示列表框控制消息 SBM表示滚动条控制消息 WM表示窗口消息,消息,Windows编程常用消息 窗口管理消息、初始化消息、输入消息、系统消息、剪贴板消息、控制处理消息、控制通知消息、滚动条通知消息、非用户区消息、MDI(多文档界面)消息、DDE(动态数据交换)消息、以及应用程序自定义的消息等。 应用程序自定义的消息可以供内部应用程序和系统内其他进程通信使用。,Windows应用程序常用消息,WM_LBUTTONDOWN WM_KEYDO

10、WN WM_ CHAR WM_CREATE WM_CLOSE WM_DESTROY WM_QUIT WM_PAINT,Windows应用程序常用消息,WM_LBUTTONDOWN 产生单击鼠标左键的消息 wParam包含一整数值以标识鼠标键的按下状态 MK_LBUTTON按下鼠标左键 MK_MBUTTON按下鼠标中键 MK_RBUTTON按下鼠标右键 lParam低字节包含当前光标的X坐标值;高字节包含当前光标的Y坐标值,Windows应用程序常用消息,WM_LBUTTONDOWN 此外,相似的消息还有: WM_LBUTTONUP:放开鼠标左键时产生; WM_RBUTTONDOWN:单击鼠标右

11、键时产生; WM_RBUTTONUP:放开鼠标右键时产生; WM_LBUTTONDBLCLK:双击鼠标左键时产生; WM_RBUTTONDBLCLK:双击鼠标右键时产生。,Windows应用程序常用消息,WM_KEYDOWN 按下一个非系统键时产生的消息 系统键是指实现系统操作的组合键,例如Alt 与某个功能键的组合以实现系统菜单操作等。 wParam:按下键的虚拟键码,用以标识按下或释放的键,如F1的虚拟键码在Windows.h文件中定义为VK_F1 1Param:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。,Windows应用程序常用消息,WM_KEYDOWN 相似的消息还

12、有: WM_KEYUP, 在放开非系统键时产生,Windows应用程序常用消息,WM_ CHAR 按下一个非系统键时产生的消息 wParam 为按键的ASCII码 lParam 与WM_KEYDOWN的相同,Windows应用程序常用消息,WM_CREATE 由CreateWindow函数发出的消息 wParam:未用 lParam:包含一个指向CREATESTRUCT数据结构的指针该结构是传递给CreateWindow函数的参数的副本,Windows应用程序常用消息,WM_CLOSE 关闭窗口时产生的消息 wParam和lParam均未用,Windows应用程序常用消息,WM_DESTROY

13、 由DestroyWiodow函数发出的消息 wParam和lParam均未用。,Windows应用程序常用消息,WM_QUIT 由PostQuitMessage函数发出的消息 wParam:含退出代码,标识程序退出运行时的有关信息 lParam:未用,Windows应用程序常用消息,WM_PAINT 当发生用户区移动或显示事件、用户窗口改变大小的事件、程序通过滚动条滚动窗口时,均产生WM_PAINT消息。 当下拉式菜单关闭并需要恢复被覆盖的部分以及Windows清除对话框或消息框等对象,并需要恢复被覆盖的部分时,也将产生WM_PAINT消息。,Windows中的事件驱动程序设计,过程驱动方法

14、计算平均成绩,事件驱动方法计算平均成绩,Windows中的事件驱动程序设计,事件驱动程序设计 是围绕着消息的产生与处理而展开的。 一条消息是关于发生的事件的信息。 Windows消息是事件驱动的,消息是不会以任何预定义顺序出现的。 事件驱动程序方法提供了许多便利,对于那些需要大范围的用户干预的应用程序来说,更显其优越性。,Windows应用程序组成及编程步骤,应用程序的组成 源程序组成结构,Windows应用程序组成及编程步骤,应用程序的组成 一个完整的Windows应用程序通常由五种类型的文件组成。 C语言源程序文件 头文件 模块定义文件 资源描述文件 项目文件,Windows应用程序组成及

15、编程步骤,源程序组成结构 Windows应用程序具有相对固定的基本结构,其中入口函数WinMain和窗口函数WndProc构成基本框架,包含各种数据类型、数据结构与函数等。 WinMain和WinProc是Windows应用程序的主体,Windows应用程序组成及编程步骤,源程序组成结构 WinMain函数 窗口函数WinProc 数据类型 一些重要的数据结构,Windows应用程序组成及编程步骤,WinMain函数 是所有应用程序的入口,类似C语言中的Main函数 它的功能是完成一系列的定义和初始化工作,并产生消息循环 实现以下功能: 注册窗口类,建立窗口及执行必要的初始化工作 进入消息循环

16、,据接受的消息调用相应的处理过程 当消息循环检索到WM_QUIT时终止程序运行,Windows应用程序组成及编程步骤,WinMain函数 三个基本的组成部分: 函数说明 初始化 消息循环,Windows应用程序组成及编程步骤,WinMain函数说明,int WINAPI WinMain ( HINSTANCE hThisInst,应用程序当前实例句柄 HINSTANCe hPrevInst,应用程序其他实例句柄 LPSTR lpszCmdLine, 指向程序命令行参数的指针 Int nCmdShow应用程序开始执行时窗口显示方式的整数值标识 ),Windows应用程序组成及编程步骤,WinMa

17、in函数说明 注意!Windows是多任务管理的,同一应用程序的多个窗口可能会同时存,Windows系统对每个窗口的执行称为一个实例(instance),并用一个实例句柄来唯一标识,Windows应用程序组成及编程步骤,初始化 包括窗口类的定义、注册、创建窗口实例和显示窗口四部分,Windows应用程序组成及编程步骤,初始化-窗口类的定义 通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数: LoadIcon函数作用是在应用程序中加载一个窗口图标。其原型为:HICON LoadIcon(HINSTANCE hInstance, /图标资源所在

18、的模块句柄, /NULL则使用系统预定义图标LPCTSTR lpIconName /图标资源名或系统预定义图标标识名),Windows应用程序组成及编程步骤,初始化-窗口类的定义 LoadCursor函数作用是在应用程序中加载一个窗口光标,其原型为: HCURSOR LoadCursor(HINSTANCE hInstance,/光标资源所在的模块句柄,/NULL则使用系统预定义光标LPCTSTR lpCursorName/光标资源名或系统/预定义光标标识名),Windows应用程序组成及编程步骤,初始化-窗口类的定义 GetStockObject函数应用程序调用函数GetStockObjec

19、t获取系统提供的背景刷,其原型为: HBRUSH GetStockObject(int nBrush);/nBrush为系统提供的背景刷的标识符,Windows应用程序组成及编程步骤,初始化-注册窗口类 Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。其形式为:RegisterClass( /wndclass为窗口类结构 RegisterClass函数的返回为布尔值,注册成功则返回真,Windows应用程序组成及编程步骤,初始化-创建窗口 创建一个窗口类的实例由函数CreateWindow()实现,函

20、数原型为: HWND CreateWindow ( LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle,窗口标题名 DWORD dwStyle, 创建窗口的样式 int x,y, 窗口左上角坐标 int nWidth,nHeight,窗口宽度和度高 HWND hwndParent, 该窗口的父窗口句柄 HWENU hMenu,窗口主菜单句柄 HINSTANCE hInstance, 创建窗口的应用程序当前句柄 LPVOID lpParam 指向一个传递给窗口的参数值的指针 ),Windows应用程序组成及编程步骤,初始化-显示窗口 窗口类的显示由ShowW

21、indow和UpdateWindow函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口,其形式为:ShowWindow(hwnd,nCmdshow);/nCmdshow为窗口显示形式标识 显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息,形式为:UpdateWindow(hwnd);,常见显示形式标识及其说明,Windows应用程序组成及编程步骤,消息循环 Windows应用程序的运行以消息为核心。 Windows将产生的消息放入应用程序的消息队列,而应用程序的WinMain函数从消息循环提取队列中的消息,并将其传递给窗口函数的相应过程。

22、,Windows应用程序组成及编程步骤,消息循环 消息循环的常见格式如下: MSG Msg; while (GetMessage ( 函数GetMessage的作用是从消息队列中读取一条消息,并将消息放在MSG结构中,Windows应用程序组成及编程步骤,消息循环 GetMessage形式为:GetMessage(lpMSG, /指向MSG结构的指针 hwnd, nMsgFilteMin, /用于消息过滤的最小消息号值 nMsgFilterMax /用于消息过滤的最大消息号值 ) GetMessage返回零值,即检索到WM_QUIT消息,程序结束循环并退出,Windows应用程序组成及编程步骤

23、,消息循环 TranslateMessage函数将消息的虚拟键转换为字符信息,形式为: TranslateMessage(lpMsg); DispatchMessage函数将消息传送到指定窗口函数,形式为: DispatchMessage(lpMsg);,Windows应用程序组成及编程步骤,窗口函数 定义了应用程序对接收到的不同消息的响应 包含了对各种可能接收到的消息的处理过程 WinProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,窗口函数的一般形式如下: LRESULT CALLB

24、ACK WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam ) switch(message) message为标识的消息 case break; case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wParam,lParam); return(0); ,Windows应用程序组成及编程步骤,数据类型 在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型,Windows应用程序组成及编程步骤,一些

25、重要的数据结构 MSG:包含一个消息的全部信息,是消息发送的格式,定义为: typedef struct tagMSG HWND hwnd; UINT message; WPARAM wParam; LPARAM lParam; DWORD time; POINT pt; MSG;,Windows应用程序组成及编程步骤,一些重要的数据结构 WINDCLASS:包含一个窗口类的全部信息及属性,定义为:,typedef struct tagWNDCLASSUINT style;/窗口类的样式,一般为0WINDPROC lpfnWndProc;/指向窗口函数的指针Int cbClsExtra;/分配

26、在窗口类结构后的字节数Int cbWndExtra;/分配在窗口实例后的字节数HINSTANCE hInstance;/定义窗口类的应用程序实例句柄HICON hIcon;/窗口类的图标HCURSOR hCursor;/窗口类的光标HBRUSH hbrBackground;/窗口类的背景刷LPCTSTR lpszMenuName;/窗口类菜单资源名 LPCTSTR lpszClassName;/窗口类名WNDCLASS,Windows应用程序组成及编程步骤,一些重要的数据结构 POINT:定义了屏幕上或窗口中的一个点的X和 Y坐标,定义为:typedef struct tagPOINT LON

27、G x; LONG y; POINT;,Windows应用程序组成及编程步骤,一些重要的数据结构 RECT:定义了一个矩形区域及其左上角和右下角的坐标,定义为:typedef struct tagRECTLONG left;/矩形框左上角x坐标LONG top;/矩形框左上角y坐标LONG right;/矩形框右下角x坐标LONG bottom;/矩形框右下角y坐标RECT;,应用程序举例,【例】创建应用程序框架。本例的目的在于说明创建Windows应用程序的方法及过程,#include /窗口函数说明 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM, LP

28、ARAM); /初始化窗口类 /WinMain函数说明 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lpszClassName = “窗口”;/窗口类名 char lpszTitle= My_Windows;/窗口标题名,/窗口类的定义 wndclass.style = 0;/窗口类型为缺省类型 wndclass.lpfnWndProc = WndProc ;

29、 /窗口处理函数为WndProc wndclass.cbClsExtra= 0 ;/窗口类无扩展 wndclass.cbWndExtra= 0 ;/窗口实例无扩展 wndclass.hInstance = hInstance ;/当前实例句柄 wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ; /窗口的最小化图标为缺省图标 wndclass.hCursor = LoadCursor( NULL, IDC_ARROW) ; /窗口采用箭头光标 wndclass.hbrBackground = GetStockObject( WHITE_BRUS

30、H) ; /窗口背景为白色 wndclass.lpszMenuName = NULL ; /窗口中无菜单 wndclass.lpszClassName = lpszClassName ; /窗口类名为窗口示例,/窗口类注册 if( !RegisterClass( /不使用该值,/显示窗口 ShowWindow( hwnd, nCmdShow) ; /绘制用户区 UpdateWindow(hwnd); /消息循环 while( GetMessage(/消息循环结束即程序终止时将信息返回系统 ,/窗口函数 LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam, LPARAM lParam) switch(message) case WM_DESTROY: PostQuitMessage(0);/调用PostQuitMessage发出WM_QUIT消息 default:/默认时采用系统消息默认处理函数 return DefWindowProc(hwnd,message,wParam,lParam); return (0); ,

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

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

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


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