win编程_2讲.ppt_第1页
win编程_2讲.ppt_第2页
win编程_2讲.ppt_第3页
win编程_2讲.ppt_第4页
win编程_2讲.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、温馨小贴士:听课时关注以下几个问题,1.窗口、句柄、消息机制和WinApp设计思路! 2.WinMain( )的功能是什么?其中最核心的是以消息循环为主的哪两部分? 3.窗口函数WndProc()是如何处理消息的? 4. WinApp是怎样结束的?出口函数是哪个? 5. WinApp中,Windows系统、WinMain( )和窗口函数WndProc()之间的关系关系怎样?,注意把握WinApp一般组成中相对稳定与可变之处,本章要点 尽管Windows应用程序变化万千,但消息机制和窗口过程却是Windows应用程序的基石和骨架,贯穿于所有Windows应用程序之中。 本章将介绍这些基本概念,并

2、深入剖析WinApp的组成结构和消息机制,并以一个最为简单的框架窗口程序为例,介绍WinApp 的一般架构和控制机制,为Windows编程奠定基础。,第3章 Windows应用程序,2讲,Windows编程概述 Windows应用程序基础知识 Windows中的事件驱动程序设计 Windows应用程序组成,本讲主要内容,一、Windows编程概述,1.Windows应用程序的特点:,标准的图形用户界面(GUI); 应用程序与硬件设备无关的特性; 所有的Windows应用程序都是消息驱动的; 基于资源的程序设计等。,一、Windows编程概述,2.Windows图形用户界面:,窗口(window

3、)由句柄唯一标识; 对话框(Dialog)人机交互界面; 图标(Icon)代表某项操作或程序的图符; 位图(Bitmap)用位模式形成的图像; 菜单(Menu)命令; 工具栏(ToolBar)常用的菜单项; 状态栏(StateBar)操作状态或操作提示,一、Windows编程概述,3.Windows编程的基本约定:,标识符,即命名规则 数据类型(参见P75表3-7) (常用基本类型的别名,如LPSTR,DWORD,UINT) 及处理基本数据类型的宏:LOWORD, HIWORD 句柄,一、Windows编程概述,命名规则:采用“匈牙利”命名法,函数命名规则 函数名 = 动词 + 名词 动词和名

4、词的第一个字母必须大写 例 GetMessage 变量命名规则 小写字母前缀表示变量的类型,其余 的部分描述变量的功能 例 nCount,一、Windows编程概述,Windows变量的常用前缀,一、Windows编程概述,4.Windows应用程序接口,API 是由Windows操作系统提供的函数定义、参数定义和消息格式的集合。可供应用程序使用。,Application Programming Interface,一、Windows编程概述,API的分类:,窗口管理接口函数USER32.DLL 图形设备接口函数GDI32.DLL 系统服务接口函数KERNEL32.DLL,一、Windows编

5、程概述,5.Windows应用程序的编程方法:有2,即,基于C语言和SDK工具: 直接使用API,易于理解工作原理。 基于C+和MFC类库 :以基本类库作为应用程序的接口。,Software Development Kit,Microsoft Foundation Class,一、Windows编程概述,API编程与MFC编程的关系:,学习 Win32编程,了解 Win API编程基础,目的在于学习VC时,能理解相关概念,避免对MFC产生费解。 而学习API编程的关键在于了解:窗口的创建,对话框和控件等资源的创建,消息循环,句柄的含义等。重点把握Win32 App是如何运作的,窗口间的关系又是

6、怎样的? 当然,开发程序时多使用MFC。,二、Windows应用程序基础知识,Windows编程中的几个重要概念:,窗口 句柄 事件驱动 消息和消息队列,1.窗口_窗口的概念,1.窗口_窗口的作用与意义,窗口是应用程序与用户交互的界面; 窗口元素以对象方式组织; 一个应用程序由一/多个窗口组成; 程序运行过程是窗口之间,窗口与系统、窗口与用户之间交换并处理数据的过程。,2.句柄_句柄的概念,句柄是Windows用来标识应用程序中不同的对象和同类对象中不同的实例的惟一整数。,窗口 按钮 图标 滚动条 输出设备 控制 文件,handle,2.句柄_句柄的类型,3.事件驱动的概念,事件:事件是对计算

7、机操作的动作 。 每个事件对应一个消息,即每个事件发生的效果是产生消息。,Windows应用程序的执行顺序取决于事件发生的顺序,即程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。,4.消息_消息的概念,消息: 是操作系统通知应用程序某件事情已经发生了的一种方式。,消息,消息_消息的内容,typedef struct tagMSG HWND hwnd; /接收窗口句柄 UINT message;/消息标识 WPARAM wParam;/包含有关消息的附加信息, LPARAM lParam;/不同消息其值有所不同 DWORD time; /消息入队时间,以ms为单位

8、POINT pt;/消息发送时光标位置, 其数据类型POINT MSG;,typedef struct tagPOINT LONG x; LONG y; POINT;,消息_windows中消息的表示,消息_消息分类及前缀,Windows中主要有3类消息: 1.标准/窗口消息 2.命令消息 3.控件消息,WM_表示窗口消息 WM_COMMAND BM_表示按钮控制消息 CB_表示组合框控制消息 DM_表示默认下压式按钮控制消息 EM_表示编辑控制消息 LB_表示列表框控制消息 SBM表示滚动条控制消息,消息_消息的产生,用户产生消息 Windows 本身产生消息 应用程序本身产生消息 其他应用

9、程序产生消息,消息_消息的传递,系统消息队列,三、Windows中的事件驱动程序设计,1.事件驱动编程模型:,2.事件驱动程序执行的基本流程,3. Windows应用程序开发过程,一个完整的Windows应用程序通常至少包含以下5种类型的文件,1.C语言源程序文件(.cpp) 2.头文件(.h) 3.工作区文件(.dsw) 4.资源描述文件(.rc) 5.项目文件(.dsp),四、Windows应用程序的组成,四、 Windows应用程序的组成,1. 所有应用程序的入口,类似main函数, 2. 完成一系列的定义和初始化,并产生消息循环,WinMain和WinProc是 Windows应用程序

10、的主体,1. The WinMain Function,调用API函数RegisterClass注册应用程序的窗口类; 调用相关的API函数,在内存中创建和显示窗口,并进行其它必要的初始化处理; 创建并启动应用程序的消息循环,检查窗口是否产生消息进入消息队列,并分发消息到相应的窗口函数作进一步处理; 如果接收到WM_QUIT消息,则调用API函数PostQuitMessage,向系统请求退出。,2. The Window Procedure,使用回调函数,由应用程序定义; 决定窗口在客户区显示的内容和窗口对用户输入如何反应; 处理开发者添加的消息响应代码,如果不存在开发者添加的消息响应代码,将

11、由API函数defWindowProc执行统一的默认消息处理。,WinApp示例仅创建一个窗口的App,#include/嵌入windows的基本功能。 LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); /窗口函数说明 /- 以下初始化窗口类 - int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) /必要的变量准备 HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lp

12、szClassName=窗口;/窗口类名 char lpszTitle=My_Window;/窗口标题名,/窗口类的定义 wndclass.style=0;/窗口类型为缺省类型P72表3-5常用窗口标识 wndclass.lpfnWndProc=WndProc; /定义窗口处理函数 wndclass.cbClsExtra=0;/窗口类无扩展 wndclass.cbWndExtra=0;/窗口实例无扩展 wndclass.hInstance=hInstance; /当前实例句柄 wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); wndclass.hCu

13、rsor=LoadCursor(NULL,IDC_ARROW) ; wndclass.hbrBackground =(HBRUSH)GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName=NULL; /窗口中无菜单 wndclass.lpszClassName=lpszClassName; /窗口类名为窗口,WinApp示例仅创建一个窗口的App,/- 以下进行窗口类的注册 - if(!RegisterClass( ,WinApp示例仅创建一个窗口的App,/-创建实例窗口,并发出WM_CREATE消息- hwnd=CreateWindow (lp

14、szClassName,/窗口类名 lpszTitle,/窗口实例的标题名 WS_OVERLAPPEDWINDOW,/窗口的风格 CW_USEDEFAULT, CW_USEDEFAULT,/窗口左上角坐标为缺省值 CW_USEDEFAULT, CW_USEDEFAULT,/窗口的高和宽为缺省值 NULL,/此窗口无父窗口 NULL,/此窗口无主菜单 hInstance,/创建此窗口的应用程序的当前句柄 NULL ); /不使用该值,WinApp示例仅创建一个窗口的App,/-显示窗口 - ShowWindow(hwnd, nCmdShow) ; /nCmdshow为窗口显示形式标识,/-更新并

15、绘制用户区,并发出WM_PAINT消息- UpdateWindow(hwnd);,WinApp示例仅创建一个窗口的App,/- 消 息 循 环 - while( GetMessage( /消息循环结束即程序终止时将信息返回系统 ,WinApp示例仅创建一个窗口的App,/窗口函数的定义 LRESULT CALLBACK WndProc(HWND hwnd,UINT message, WPARAM wParam,LPARAM lParam) switch(message) case WM_DESTROY: /本窗口正将被销毁 PostQuitMessage(0);/请求退出窗口和应用程序 def

16、ault:/缺省时采用系统消息缺省处理函数 return DefWindowProc(hwnd,message,wParam,lParam); return(0); ,WinApp示例仅创建一个窗口的App,case WM_PAINT: hdc=BeginPaint(hwnd,HDC hdc; PAINTSTRUCT ps; char *hello=窗外的世界真精彩,窗内的天地也奇妙!;,窗口框架应用程序_一点扩充,课后任务与目标,任务1: 通过AppWizard,创建一个Win32窗口应用程序,使其在窗口上显示符号串“Hello World!”. 利用项目工作区,查看其文件组成和源文件代码,了解项目文件的组织结构。 练习打开、关闭和编译调试应用程序的方法。,熟悉VC+ 6.0集成开发环境,学会使用MSDN来获得帮助。,任务2:完成P76例3-1“应用程序窗口示例”编程,即:动手将作为基石与框架的最小WinApp建立起来并调试通过保存下来。并思考:,按照模块化的思想

温馨提示

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

评论

0/150

提交评论