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

下载本文档

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

文档简介

Visual C+,第三章 Windows 编程基础,2019/8/3,1,内容提要,Windows编程基础知识 Windows应用程序常用消息 Windows中的事件驱动程序设计 Windows应用程序组成及编程步骤,2019/8/3,2,3.1.Windows编程基础知识,集资源和工具于一体的开发系统,2019/8/3,可视化开发系统 (资源和工具的集成),源程序 编辑器 编译器,调试工具 语法检查 程序修改 运行监视,应用程序 Help和Setup 开发工具,函数库和 系统函数 开发工具,资源管理器 各种窗口和 控件的编辑器,例程库 及Help,其他 功能,3.1.Windows编程基础知识,Windows的程序设计语言 “面向对象(Object-Oriented)”的语言VC+,VB和VJ适合于Windows的程序开发。 Windows的程序中,对象是具有规范形态和操作模式的部件: 窗口 菜单 按钮 对话框 程序模块,2019/8/3,3.1.Windows编程基础知识,Windows的程序设计方法 传统编写法-使用API (Application Programming Interface) 交互式方法-使用MFC (Microsoft Foundation Class) 编写Windows程序主要工作: 在创建对象 为对象属性赋值,2019/8/3,5,应用程序接口API 定义Win系统各种特殊函数及数据结构 包含上千个可调用系统功能的标准API函数 实现应用程序与Win系统间的标准程序接口 API函数实现三种功能 窗口管理函数窗口的创建、移动和修改 图形设备(GDI)函数与设备无关的图形操作 系统服务函数与操作系统有关的多种服务,2019/8/3,3.1 Windows编程基础知识,用MFC库交互式可视化编程 MFC类库含有大量已定义好的类(class),可根据编程的需要,调用相应的类,或自定义有关的类 实现可视化交互开发方式 选择所需对象并确定其属性,搭建起应用程序的“大框架”, 编写必要的细节代码段,构成完整的应用程序。,2019/8/3,3.1 Windows编程基础知识,API函数和MFC类库编程需了解的相关概念 窗口(Window) 事件驱动(Event-driven) 句柄(Handle) 消息(Message),2019/8/3,8,3.1 Windows编程基础知识,3.1 Windows编程基础知识,(1) 窗口,2019/8/3,窗口及其功能 系统对应用程序管理的基本单位 应用程序与用户之间交互的接口环境 Window应用程序基本的操作单元 Win应用程序编程 创建一个或多个窗口 Win应用程序运行 窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与交换的过程。,2019/8/3,10,3.1 Windows编程基础知识,(2) 事件驱动相关概念 事件一种情况或一种活动的发生、或一种指定状态的变化,例如:按下鼠标 事件驱动由描述事件发生的信息(消息)来驱动程序的执行。 程序的执行取决于事件发生的顺序; 消息的产生并不要求有次序之分。 事件驱动编程方法 针对事件或消息的处理进行; 适于编写交互式程序。,2019/8/3,11,3.1 Windows编程基础知识,(3) 句柄相关概念 句柄用于标识不同的对象和同类对象中不同的实例的标识符,一个其长度为4字节长整数值。 句柄是Win应用程序编程的基础,应用程序通过句柄访问相应的对象信息。,2019/8/3,12,3.1 Windows编程基础知识,句柄标识的对象实例 窗口 按钮 图标 滚动条 输出设备 控件 文件 .。,常用句柄类型 HWND 窗口句柄 HINSTANCE 前实例句柄 HCURSOR 光标句柄 HFONT 字体句柄 HPEN 画笔句柄 HBRUSH 画刷句柄 HDC 设备环境句柄 HBITMAP 位图句柄 HICON 图标句柄 HMENU 菜单句柄 HFILE 文件句柄,2019/8/3,13,3.1 Windows编程基础知识,3.1 Windows编程基础知识,2019/8/3,14,(4) 消息相关概念 应用程序利用消息与系统及其它应用程序进行信息交换。 消息的三个组成部分: 消息号:由事先定义好的消息名标识 字参数(wParam) :用于提供消息的附加信息 长字参数(lParam) :用于提供消息的附加信息,2019/8/3,15,附加信息 与具体消息号的值有关,3.1 Windows编程基础知识,消息用结构MSG表示 typedef struct tagMSG HWND hwnd; /窗口句柄,为null,则检索队的所有消息 UINT message;/消息号,由Windows.h中的宏定义来标识 WPARAM wParam; /消息的附加信息 LPARAM lParam; /消息的附加信息 DWORD time; /指定消息送至队列的时间 POINT pt; /指定消息发送时屏幕光标的位置, MSG;,2019/8/3,数据类型说明: Windows Data Types windef.h,3.1 Windows编程基础知识,消息的分类 各种消息分类,分别以不同的前缀表示: BM 按钮控制消息。 CB 组合框控制消息。 DM 默认下压式按钮控制消息。 EM 编辑控制消息。 LB 列表框控制消息。 SBM 滚动条控制消息。 WM 窗口消息。,2019/8/3,17,3.1 Windows编程基础知识,3.2. Windows应用程序常用消息,窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息,控制通知消息 滚动条通知消息 非用户区消息 MDI消息 DDE消息 应用程序自定义的消息,2019/8/3,18,3.2. Windows应用程序常用消息,(1) WM_LBUTTONDOWN: 单击鼠标左键的消息,附加信息: lParam当前光标位置 低字节为X坐标值 高字节为Y坐标值 wParam整数以标识鼠标键的按下状态 MK_LBUTTON 按下鼠标左键 MK_MBUTTON 按下鼠标中键 MK_RBUTTON 按下鼠标右键,2019/8/3,19,3.2. Windows应用程序常用消息,类似的鼠标左右键消息还有: WM_LBUTTONUP:放开左键; WM_RBUTTONDOWN:单击右键; WM_RBUTTONUP: 放开右键; WM_LBUTTONDBLCLK:双击左键; WM_RBUTTONDBLCLK:双击右键。,2019/8/3,20,3.2. Windows应用程序常用消息,(2) WM_KEYDOWN: Posted to the window with the keyboard focus when a nonsystem key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed. wParam 按下键的虚拟键码,标识按或放。 lParam 记录按键的重复次数、扫描码、转移代码及先前键的状态等信息。 相似的消息: WM_KEYUP, 放开非系统键时产生,2019/8/3,21,3.2. Windows应用程序常用消息,(3) WM_ CHAR: Posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed. wParam按下键的ASCII码。 lParam与WM_KEYDOWN的相同。,2019/8/3,22,3.2. Windows应用程序常用消息,(4) WM_CREATE: 由CreateWindow函数发出的消息。 wParam未用。 lParam个指向CREATESTRUCT数据结构的指针。 (5) WM_CLOSE: 关闭窗口时产生的消息。 wParam和lParam均未用。 (6) WM_DESTROY: 由DestroyWiodow函数发出的消息。 wParam和lParam均未用。,2019/8/3,23,3.2. Windows应用程序常用消息,(7) WM_QUIT 退出应用程序时由PostQuitMessage函数发出的消息。 wParam标识退出时的有关信息。 lParam未用。 (8) WM_PAINT 用户区移动或显示、用户窗口改变大小 程序通过滚动条滚动窗口 下拉式菜单关闭并需要恢复被覆盖的部分 Windows清除对话框等对象,并需要恢复被覆盖的部分,2019/8/3,24,3.3 Windows中的事件驱动程序设计,计算平均成绩,2019/8/3,25,过程驱动方法,事件驱动方法,3.4.Windows应用程序组成及编程步骤,3.4.1 应用程序的组成 3.4.2 源程序组成结构 3.4.3 应用程序举例,2019/8/3,26,3.4.1 应用程序的组成,一个完整的Windows应用程序通常包含如下几种类型的文件: C/C+语言源程序文件(.c或.cpp) 头文件(.h) 模块定义文件(.def) 资源描述文件(.rc) 项目文件(.mak) .,2019/8/3,27,3.4.2 源程序组成结构,WinMain和WndProc是Windows应用程序的主体 入口函数WinMain Every Windows program includes an entry-point function that is named either WinMain or wWinMain. 所有应用程序的入口,类似Main函数, 完成一系列的定义和初始化,并产生消息循环 窗口函数WndProc An application-defined function that processes messages sent to a window. 处理消息,2019/8/3,28,三个基本的组成部分: 函数说明 初始化 消息循环 功能 注册窗口类,建立窗口及初始化 进入消息循环,根据接受的消息调用相应的处理过程 当消息循环检索到WM_QUIT时终止程序运行,2019/8/3,WinMain函数,WinMain函数(1) 函数说明,int WINAPI WinMain ( HINSTANCE hThisInst,应用程序当前实例句柄 HINSTANCE hPrevInst,应用程序其他实例句柄 LPSTR lpszCmdLine, 指向命令行参数的指针 Int nCmdShow 初始窗口显示方式的整数值标识 ),2019/8/3,注意!Win是多任务管理的,同一应用程序可能同时存在多个窗口,Win系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识,WinMain函数(2) 初始化,窗口类的定义:定义窗口的形式与功能 LoadIcon() LoadCursor() GetStockObject() 窗口类的注册:窗口类必须先注册后使用 RegisterClass() 创建窗口实例 CreateWindow() 显示窗口 ShowWindow() UpdateWindow(),2019/8/3,(a)窗口类定义 通过给窗口类WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数: LoadIcon加载一个窗口图标。其原型为: HICON LoadIcon ( HINSTANCE hInstance, LPCTSTR lpIconName ),2019/8/3,图标资源名或系统预定义图标标识名,图标资源模块句柄,WinMain函数(2) 初始化,LoadCursor加载一个窗口光标 HCURSOR LoadCursor ( HINSTANCE hInstance, LPCTSTR lpCursorName) GetStockObject获取系统提供的背景刷 HBRUSH GetStockObject(int nBrush);,2019/8/3,光标资源名或系统预定义图标标识名,光标资源模块句柄,WinMain函数(2) 初始化,(b)注册窗口类 Win系统提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。由函数RegisterClass()实现注册。 RegisterClass( /wndclass为窗口类结构 RegisterClass函数的返回为布尔值,注册成功则返回真,2019/8/3,WinMain函数(2) 初始化,(c) 创建窗口示例 HWND Create Window ( LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle, 窗口标题名 DWORD dwStyle, 创建窗口的样式 int x,y, 窗口左上角坐标 int nWidth,nHeight, 窗口宽度和度高 HWND hwndParent, 该窗口的父窗口句柄 HWENU hMenu, 窗口主菜单句柄 HINSTANCE hInstance, 应用程序当前句柄 LPVOID lpParam 传递给窗口的参数值的指针 ),2019/8/3,WinMain函数(2) 初始化,2019/8/3,WinMain函数(2) 初始化,(d)显示窗口 调用ShowWindow函数在屏幕上显示窗口 ShowWindow(hwnd,nCmdshow); 显示窗口后,调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息。 UpdateWindow(hwnd);,2019/8/3,WinMain函数(2) 初始化,消息循环的常见格式如下: MSG Msg; while (GetMessage ( ,2019/8/3,38,WinMain函数(3)消息循环,GetMessage 从消息队列中读取一条消息,并将消息放在MSG结构中 返回零值,即检索到WM_QUIT消息 时,程序结束循环并退出 TranslateMessage 将消息的虚拟键转换为字符信息 DispatchMessage 将消息传送到指定窗口函数,2019/8/3,39,WinMain函数(3)消息循环,2019/8/3,WinMain函数(3)消息循环,窗口函数WndProc,定义了应用程序对接收到的不同消息的响应 包含了对各种可能接收到的消息的处理过程 由一个或多个switch语句组成 每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,2019/8/3,41,窗口函数WndProc,LRESULT CALLBACK WndProc( HWND hwnd, UINT messgae, WPARAM wParam,LPARAM lParam ) switch(message) message为标识的消息 case break; case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wParam,lParam); return(0); ,2019/8/3,42,为未定义处理过程的消息提供缺省处理

温馨提示

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

评论

0/150

提交评论