绪论Windows编程基础课件教材课程

上传人:yuzo****123 文档编号:140110405 上传时间:2020-07-27 格式:PPT 页数:103 大小:774KB
返回 下载 相关 举报
绪论Windows编程基础课件教材课程_第1页
第1页 / 共103页
绪论Windows编程基础课件教材课程_第2页
第2页 / 共103页
绪论Windows编程基础课件教材课程_第3页
第3页 / 共103页
绪论Windows编程基础课件教材课程_第4页
第4页 / 共103页
绪论Windows编程基础课件教材课程_第5页
第5页 / 共103页
点击查看更多>>
资源描述

《绪论Windows编程基础课件教材课程》由会员分享,可在线阅读,更多相关《绪论Windows编程基础课件教材课程(103页珍藏版)》请在金锄头文库上搜索。

1、绪论 (Windows 编程基础),1 Windows 操作系统的特点 1.1 直观的图形化用户界面 Windows 应用程序的外观是由诸如窗口、菜单、工具栏、状态 栏、滚动条、对话框等标准图形元素构成的。程序运行中的人 机交互操作也都是通过这些标准图形元素进行的。我们将这样 的用户界面称为图形化用户界面 GUI(Graphics User Interface)。 GUI 使得应用程序的用户界面统一、友好、美观。,1.2 丰富的设备无关操作 Window 程序的输出显示均为图形操作(包括文本操作)。各 类复杂的图形操作都是通过与物理设备无关的图形设备接口GDI (Graphics Device

2、 Interface)完成的。每个图形操作都是在一个特 定的图形设备上下文(Device Context)中完成的。也就是说,通 过设备上下文句柄,能够调用图形设备接口 GDI 所提供的相应 图形操作进行格式统一而具有特定功能的图形绘制操作,而这 些图形操作又可以通过对应的物理图设备驱动的支持,在指定 的设备上实现相应的图形输出。下图形象地示意了这种 GDI 图 形接口的实现机制:,GDI 虚拟设备,其中 Windows 虚拟内存管理的实现如下: 进程和内存空间 下面给出的图是在 Windows 95 平台上,执行同一个 EXE 文 件的两个不同进程时的虚拟内存映射图。,进程A,进程B,Win

3、dows 系统代码,Windows DLL,内存映射文件,硬盘,MFC42.DLL,用户.DLL,交换文件,EXE文件,对于每个进程来说,只有低端的 2GB(0 - 0 x7FFFFFFF) 的 地址空间是真正属于进程私有的。其中最低端的 4MB 内存空间 是禁止访问的。进程运行期间所需要的堆栈、堆和可读/写的全 局内存以及应用程序的 EXE 文件和 DLL 文件都被映射到这 2GB 空间内。而高端的 2GB 空间对所有的进程都是一样的,在这一 区间存放着所有进程共享的 Windows 核心执行过程,虚拟设备 驱动程序(VxD)和文件系统代码以及一些重要的表(如映射页 表)都被映射到最高端 1

4、GB(0 xC0000000 - 0 xFFFFFFFF)空间中。 Windows DLL 和内存映射文件在 0 x80000000 - 0 xBFFFFFFF 的内存 空间中。,由于低端的 2GB 内存空间分配给特定的进程,所以一个进 程想要改变另一个进程的堆栈、全局内存或者堆空间的内容是 不可能的。 EXE 和 DLL 代码存放空间都有只读标记,因此,它们被映射 到多个进程是没有问题的。然而在最高端的 1GB 空间有重要的 Windows 可读数据,因此,这部分内存很容易受到错误程序的攻 击,例如毁坏系统表。在 0 x80000000 - 0 xBFFFFFFF 地址空间中 存放的一个进程

5、的映射文件也可能被另一个进程破坏。,在 Windows NT 中这些问题不会发生,因为在 Windows NT 中,进程只允许访问低端的 2GB 空间,并且这 2GB 的最高端和 最低端的 64KB 空间是不允许访问的。同时高端的 2GB 空间中 所存放的内容完全受保护。这就是为何提倡使用 Windows NT 的 原因之一( Windows 2000 和 Windows XP 有类似的安全机制)。 虚拟内存如何工作 为什麽要使用虚拟镜像技术 计算机不可能有数百个 GB 的 RAM(物理内存)和数百个 GB 的磁盘空间能满足多进程(每个进程 4GB)的需要。 每个进程的 4GB 空间不会全部使

6、用,更不会同时使用。, 如何实现虚拟镜像技术, 32 位线性地址分三段,页表目录、页表和页内偏移量。 每页 4KB 空间。 页以 4KB 为边界,即页的首地址必须是 4KB 的整倍数。 每个进程可以获得的虚拟内存空间为 4GB ,每一个物理 地址的形成可以解析如下: 页表地址 = 页表目录地址+ 偏移量(第 22 - 31 位),共 有1K 个页表。 页地址 = 页表地址+ 偏移量(地址第 12 - 21 位),共有 1K*1K = 1M 页。 物理地址 = 页地址 + 偏移量(地址第 0 - 11 位),共有 1M*4KB = 4GB 内存单元, 每个页表入口都包含存在位(表示页是否在物理

7、RAM 中) 和读/写位(表示页中内容是否可读/写或只读)。 当需要访问此页内容时,根据“存在”位确定是否需要将此 页的内容从磁盘读入到此物理页中。如果页中内容有一段 时间未被访问,则根据虚拟管理的优化算法确定是否将页 中内容交换到磁盘中或直接放弃,使物理页空间可以被新 进程的页使用。在收回页面使用时,根据页的“读/写”位来 确定是将页中内容交换到磁盘中(例如,进程中所有可读 /写数据),或直接放弃(例如,程序 EXE 代码和 DLL 代 码,进程中的常量)。, 用户可以使用的内存操作函数 使用VirtualAlloc 进行内存的保留和占用,该函数的原型: LPVOID VirtualAllo

8、c( LPVOID lpAddress, DWORD dwSize, DWORD flAllocationType, DWORD flProtect ) 使用 VirtualFree 收回 VirtualAlloc 保留和占用的内存空间。VirtualFree 的原型: BOOL VirtualFree( LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType ); 使用GlobalAlloc 函数在Windows 运行时堆中分配空间。 HGLOBAL GlobalAlloc(UINT uFlags, SIZE_T dwBytes); 使用Global

9、Lock锁定GlobalAlloc 分配的内存空间一次, 并获取操作句柄。每锁定一次LockCount+1。 LPVOID GlobalLock(HGLOBAL hMem);, 使用GlobalUnlock 将内存空间解锁一次,LockCount1, 当LockCount为0时,所分配的内存空间不再被锁定。 BOOL GlobalUnlock(HGLOBAL hMem); 未锁定的内存地址(句柄)可以用GlobalFree 函数释放。HGLOBAL GlobalFree(HGLOBAL hMem ); 使用new 分配内存空间。 使用delete 释放由new 分配的内存空间。 内存映射文件:

10、将一个地址范围直接映射到相应的文件。 当进程访问相应的内存页时,系统将分配 RAM ,并从磁盘 中读入数据或将内存中数据写入磁盘,它可以用于进程间 共享。, 访问资源:资源是包含在 EXE 和 DLL 代码中的,因此会 占用虚拟内存空间,而且这些空间在进程的生存期内是 不会被改变的,这就使得我们很容易读取一个资源。获 取资源的函数原型: HGLOBAL LoadResource( HMODULE hModule, HRSRC hResInfo); 参数: hModule 包含所取资源的模块句柄,NULL 表示从进程 中取资源。 hResInfo 所取资源的句柄。 返回一个全局内存句柄 HGLO

11、BAL 可以安全地把它当作访 问存放资源的内存空间的索引。例如:,LPVOID lpvResource = (LPVOID):LoadResource ( NULL, :FindResource ( NULL, MAKEINTRESOURCE(IDB_REDBLOCK), RT_BITMAP ); 其中FindResource 用于确定一个指定的资源位置,其原型: HRSRC FindResource( HMODULE hModule, LPCTSTR lpName, LPCTSTR lpType ); 参数: hModule 包含所取资源的模块句柄,NULL 表示从进程中 取资源。,lpNa

12、me 所取资源的名字串。本例中是使用宏定义 MAKEINTRESOURCE 将资源标识 IDB_REDBLOCK 转换为资源名。 pType 所取资源的类型。本例中使用的 RT_BITMAP 表示 所取资源是一个位图资源。,1.4 灵活的消息处理机制 队列化消息输入 Windows 操作系统将应用程序控制运行所需要各类信息以消 息的形式放在一个消息队列中,这个队列由操作系统管理。应 用程序只通过读取消息队列中的不同消息控制运行。 Windows 操作系统有一个系统消息队列,每个应用程序有一 个自己的消息队列,应用程序的消息来源: 输入消息:如键盘、鼠标输入。这类消息通过系统消息 队列被送入应用

13、程序消息队列。, 控件消息:用于与 Windows 的控件对象进行双向通信, 实现控件状态的变化。这类消息不通过系统消息队列, 可以通过应用程序消息队列,也可以直接发送到控件对 象上。 系统消息:由系统管理事件(例如系统时钟)引起的消 息。这类消息中有些要通过系统消息队列送到应用程序 消息队列,如 DDE(Dynamic Data Exchange)消息;而另 一些消息直接送入应用程序消息队列,如创建窗口消息。 用户消息:由程序员自己定义在应用程序中发出,并在 应用程序中响应处理的消息。这类消被直接送入应用程序消息队列。, 支持队列特征的消息驱动模型 Windows 操作系统主要包括三个基本内

14、核元件: GDI(Graphics Device Interface):负责虚拟图形设备的操作,例如,屏幕绘图和打印。 KERNEL:支持与操作系统密切相关的功能(如进程加载,文本切换,文件I/O,内存管理线程管理等)。 USER:为所有的用户界面对象提供接收和管理所有输入 消息、系统消息,并把它们发给相应窗口的消息队列。, 事件驱动的程序设计 MS-DOS 应用程序主要是采用顺序的、关联的、过程驱动的 程序设计方法。因此,过程的执行顺序是由程序直接控制,并 强制用户以某种不可更改的模式进行工作,交互性差。 Windows 应用程序则是采用了由事件发生来控制程序运行逻 辑的设计方法,由于事件发

15、生是随机的,没有预定的顺序,所 以用户就可以按照各种需要的、合理的顺序来安排程序的流程。 每个事件发生都会在对应的队列中放入一条消息。程序开始运 行后,总是从消息队列中读取消息等待事件的发生,并根据消 息做出相应的响应后,返回等待事件发生的状态,直至响应了 程序退出消息导致程序运行结束退出。, 支持应用程序间数据交换 Windows 支持应用程序间通过以下途径进行数据交换: 动态数据交换 DDE(Dynamic Data Exchange), 剪切板(Clipboard), 对象链接和嵌入 OLE(Object Linked and Embeded), 组件对象模型 COM(Component

16、 Object Model) 和分布式组件对象模型 DCOM(Distributed Component Object Model)。,1.5 简便的动态链接库(DLL)应用 库是为应用程序提供各种功能和资源的最重要的途径,其中 动态链接库对于支持多任务的功能和资源共享和提高内存的使 用效率更为有效。Windows 平台为动态链接库的创建、安装和调 用提供了有效的支持,使得动态链接库的应用更加简便、可 行。所以动态链接库的开发和应用成为应用程序开发的重要手 段之一。,2 Windows 应用程序的特点 2.1 事件驱动方式的程序设计模式 这种程序是由许多完成特定功能的子流程组成,在程序启动 运行之后,没有一个固定的执行流程,而是由用户的操作的结 果(事件)确定(驱动)子流程的执行,包括程序的结束。 2.2 窗口程序设计模式 Windows 应用程序的基本单位不是过程和函数,而是窗口。 这些窗口都具有标准的 Window

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号