资源预览内容
第1页 / 共47页
第2页 / 共47页
第3页 / 共47页
第4页 / 共47页
第5页 / 共47页
第6页 / 共47页
第7页 / 共47页
第8页 / 共47页
第9页 / 共47页
第10页 / 共47页
亲,该文档总共47页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
1,第2讲 Windows 应用程序基础,2,参考教材,深入浅出MFC (第2版) 侯俊杰著 华中科技大学出版社 定价: ¥ 80.0 适合于深刻理解MFC的架构,3,参考教材,Visual C+ 6 . 0技术内幕(中文版.第5版) David J. Kruglinski著 希望图书创作室 译 北京希望电子出版社 定价: ¥ 95.0 适合于初学者了解每一种编程编程方法,4,重要性,高端人才的需求 是学好其他课程的基础,5,怎样学好VC,注意听讲,讲课内容一般是学习的要点和难点 多练习,写程序是成为程序高手的唯一捷径 多看网上资料,有些网上讲的更透彻,6,可视化开发 系统集成了一系 列系统可用资源 和开发工具,一、Windows编程基础,7,采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程序,编写Windows 程序相当一部分工 作是在创建对象和 为对象属性赋值,对象特征:具有规范形态和操作模式,8,API,API函数 的功能,9,利用Windows API函数编写Windows应用程序必须首先了解以下内容: (1)窗口的概念 (2)事件驱动的概念 (3)句柄 (4)消息,10,(1) 窗口 一个应用程序的窗口一般包含下列成分:,11,编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,应用程 序与用 户之间 交互的 接口环 境,系统管理 应用程序 的基本单位,Win应用程序 基本的操作单元,12,Windows程序设计是针对事件或消息的处理进行,消息是描述事 件发生的信息 (如按下鼠标或键盘),事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式,Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。,(2)事件驱动,13,常用句柄类型及其说明,(3) 句柄,应用程序通过 句柄访问相应 的对象信息,HWND 窗口句柄 HDC 设备环境句柄 HBITMAP 位图句柄 HCURSOR 光标句柄 HICON 图标句柄 HFONT 字体句柄 HMENU 菜单句柄 HPEN 画笔句柄 HFILE 文件句柄 HBRUSH 画刷句柄 HINSTANCE 当前实例句柄,使用指针容易破坏 原对象的结构,14,Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。,typedef struct tagMSG HWND hwnd; 窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPARAM wParam; 包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam; DWORD time; 指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置, 其数据类型POINT也是一个结构体 MSG;,附加信息与具体 消息号的值有关, 在Win中消息用 结构体MSG表示,typedef struct tagPOINT LONG x; LONG y; POINT;,(4) 消息,15,补充WPARAM和LPARAM,Win 3.x中,WPARAM是16位的,而LPARAM是32位的,两者有明显的区别。因为地址通常是32位的,所以LPARAM 被用来传递地址,这个习惯在Win32 API中仍然能够看到。在Win32 API中,WPARAM和LPARAM都是32位,所以没有什么本质的区 别。Windows的消息必须参考帮助文件才能知道具体的含义。如果是自定义的消息,愿意怎么使这两个参数都行。但是习惯上,我们愿意使用LPARAM传 递地址,而WPARAM传递其他参数。,16,(4) 消息 VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:,BM 表示按钮控制消息 CB 表示组合框控制消息 DM 表示默认下压式按钮控制消息 EM 表示编辑控制消息 LB 表示列表框控制消息 SBM 表示滚动条控制消息 WM 表示窗口消息,窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息 控制通知消息 滚动条通知消息 非用户区消息 MDI消息 DDE消息 应用程序自定义的消息,Windows编 程常用消息,17,二、Windows应用程序常用消息,1. WM_LBUTTONDOWN:产生单击鼠标左键的消息,此外,相似的消息还有: WM_LBUTTONUP:放开鼠标左键时产生; WM_RBUTTONDOWN:单击鼠标右键时产生; WM_RBUTTONUP:放开鼠标右键时产生; WM_LBUTTONDBLCLK:双击鼠标左键时产生; WM_RBUTTONDBLCLK:双击鼠标右键时产生。,18,2. WM_KEYDOWN:按下一个非系统键时产生的消息,系统键是指实现系统操作的组合键,例如Alt与某个功能键的组合以实现系统菜单操作等。,3. WM_ CHAR:按下一个非系统键时产生的消息,wParam 为按键的ASCII码 lParam 与WM_KEYDOWN的相同,wParam:按下键的虚拟键码,用以标识按下或释放的键 lParam:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。,相似的消息还有WM_KEYUP, 在放开非系统键时产生,如F1的虚拟键码 在windows.h文 件中定义为VK_F1,19,4. WM_CREATE:由CreateWindow函数发出的消息,wParam:未用 lParam:包含一个指向CREATESTRUCT数据结构的指针,5. WM_CLOSE:关闭窗口时产生的消息,wParam和lParam均未用。,6. WM_DESTROY:由DestroyWiodow函数发出的消息,wParam和lParam均未用。,20,7. WM_QUIT:由PostQuitMessage函数发出的消息,退出应用程序时发出的消息 wParam:含退出代码,标识程序退出运行时的有关信息 1Param:未用,8. WM_PAINT,21,三、Windows中的事件驱动程序设计,过程驱动方法计算平均成绩,事件驱动方法计算平均成绩,22,四、Windows应用程序组成及编程步骤,1. 应用程序的组成,一个完整的Windows应用程序通常由五种类型的文件组成。,1.C语言源程序文件 2.头文件 3.模块定义文件 4.资源描述文件 5.项目文件,23,CLW (支持ClassWizard ) DSP (项目文件) DSW (工作空间文件) NCB (支持ClassView) OPT (保持工作空间的配置) PLG (建立日志文件),24,2. 源程序组成结构,1. 所有应用程序的入口,类似Main函数, 2. 完成一系列的定义和初始化,并产生消息循环,WinMain和WinProc是 Windows应用程序的主体,25,(1) WinMain函数,三个基本的组成部分:函数说明、初始化和消息循环,WinMain函数,注意!Win是多任务管理的,同一应用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识,26,(2) 初始化,(a)窗口类定义,通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:,27,LoadCursor的作用是在应用程序中加载一个窗口光标 HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName),光标资源所在的模 块句柄,NULL则使 用系统预定义光标,光标资源名或系统 预定义光标标识名,应用程序调用函数GetStockObject获取系统提供的背景刷 HBRUSH GetStockObject(int nBrush);,28,(b)注册窗口类,Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。 RegisterClass( /wndclass为窗口类结构 RegisterClass函数的返回为布尔值,注册成功则返回真,29,(c) 创建窗口实例,创建一个窗口类的实例由函数CreateWindow()实现 函数原型如下: HWND CreateWindow ( LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle, 窗口标题名 DWORD dwStyle, 创建窗口的样式 int x,y, 窗口左上角坐标 int nWidth,nHeight, 窗口宽度和度高 HWND hwndParent, 该窗口的父窗口句柄 HMENU hMenu, 窗口主菜单句柄 HINSTANCE hInstance, 创建窗口的应用程序当前句柄 LPVOID lpParam 指向一个传递给窗口的参数值的指针 ),30,31,(d)显示窗口,窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口 ShowWindow(hwnd,nCmdshow);/nCmdshow为窗口显示形式标识,显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息。 UpdateWindow(hwnd);,32,(3) 消息循环,消息循环的常见格式如下: MSG Msg; while (GetMessage ( ,将消息的虚拟键 转换为字符信息,将消息传送到 指定窗口函数,将消息传递给窗口函数的相应过程处理,Windows将产生的消息,WinMain函数,33,2 窗口函数WinProc,WinProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,34,窗口函数的一般形式如下: 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); ,在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数: void PostQuitMessage(int nExitCode) /nExitCode为应用程序的退出代码,为未定义处理过程的消息提供缺省处理,35,3数据类型,在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型,36,4. 一些重要的数据结构,MSG:包含一个消息的全部信息,是消息发送的格式,WNDCLASS:包含一个窗口类的全部信息及属性,POINT:定义了屏幕上或窗口中的一个点的X和 Y坐标,RECT:定义了一个矩形区域及其左上角和右下角的坐标,几种重要的结构,37,五、应用程序举例,【例2-1】创建应用程序框架。本例的目的在于说明创建Windows应用程序的方法及过程,#include /包含应用程序中所需的数据类型和数据结构的定义 L
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号