《吉林大学远程教育》PPT课件.ppt_第1页
《吉林大学远程教育》PPT课件.ppt_第2页
《吉林大学远程教育》PPT课件.ppt_第3页
《吉林大学远程教育》PPT课件.ppt_第4页
《吉林大学远程教育》PPT课件.ppt_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

吉林大学远程教育课件 Windows A P I 编 程 主讲人 : 翟慧杰 学 时:48 习题1 四、 Windows绘图程序设计 图形设备接口(GDI:Graphics Device Interface )是Windows的子系统,它负责在视频显示器和打印 机上显示图形。正如您所认为的那样,GDI是 Windows非常重要的部分。不但您为Windows编写的 应用系统在显示视觉信息时只使用GDI,就连 Windows本身也只使用GDI来显示用户界面对象,诸 如菜单、滚动条、图标和鼠标光标。 从程序员的观点来看,GDI由几百个函数调用和一些相 关的数据类型、宏和结构组成。 但是在开始讲述这些函数的 细节之前,让我们先从宏观上了解一下GDI的整体结构。 组成GDI的几百个函数调用可以分为几大类: 获取或创建和释放(或清除)设备描述表的函数 在绘图时 需要设备描述表句柄。 GetDC和RealseDC函数让您在非WM_PAINT 的消息期间来做到 这一点,而 BeginPaint和 EndPaint函数(虽然在技术上它们是 USER模块而不是GDI模块的一部分)在进行绘图的WM_PAINT 消息期间使用。 获取有关设备描述表信息的函数 GetTextMetrics函数来获取有 关设备描述表中当前所选字体的尺寸信息。 绘图函数 显然,在所有前提条件都得以满足之后,这些函数是 真正重要的部分。我们使用TextOut函数在窗口的客户区显示一 些文本。我们将看到,其他GDI函数还可以让您画线、填充区 域。 在屏幕或打印机上显示的图形类型本身可以被分为几类,通常 被称为“图元”,它们是: 直线和曲线 线条是所有矢量图形绘制系统的基础。GDI支持直 线、矩形、椭(包括椭圆的子集,也就是我们所说的“圆”)、椭 圆圆周上的部分曲线即所谓“弧”,以及贝塞尔曲线,我们将在本 章中分别对它们进行介绍。所有更复杂的曲线可由折线( polyline)代替,折线通过一组非常短的直线来定义一条曲线。 线条用设备描述表中选中的当前画笔绘制。 窗体客户区绘图步骤: 1获取设备环境句柄 2获取绘图工具 3选择绘图工具 4利用选择的绘图工具绘图 5恢复原来的绘图工具并删除选择的绘图工具 6释放设备环境句柄 WINDOWS GDI 函数: 1GetDC()函数 功能: 用于获取指定窗体客户区的显示器设备描述表句柄。 2ReleaseDC () 函数 功能:用于释放设备描述表句柄。 3BeginPaint()函数 功能:用于获取窗体客户区绘图的相关信息,并为绘图做好 准备。 4. EndPaint()函数 功能:用于结束窗体客户区绘图。 5. SetPixel()函数 功能:用于在窗体客户区绘制点(像素)。 6、RGB()宏 功能: 用于设置颜色。 7、CreatePen()函数 功能: 用于建立逻辑笔。 8、MoveToEx()函数 功能:用于窗体客户区移动逻辑笔。 9、LineTo()函数 功能:用于在窗体客户区当前位置画线。 10、Ellipse()函数 功能:用于窗体客户区绘制椭圆。 11、SelectObject()函数 功能:用于选择一种绘图工具柄将其装入设备描述表。 12、DeleteObject()函数 功能:用于删除一个绘图工具。 13、TextOut()函数 功能:用于在窗体客户区输出文本。 14、SetBkMode()函数 功能:用于设置窗体客户区背景填充方式。 15、SetTextColor()函数 16、CreateFont()函数 其它函数 1SetTimer()函数 功能:用于建立产生时间消息的时间控件。 2、KillTimer()函数 功能:用于取消时间控件。 3、GetClientRect()函数 功能:用于获取窗体客户区范围。 画点和线: 我们已谈论过Windows图形设备接口将图形输出设备的设备驱动程序与计算 机连在一起的方式。在理论上,只要提供SetPixel和GetPixel函数,就可以使用 图形设备驱动程序绘制一切东西了。其余的一切都可以使用 GDI模块中实现的 更高级的例程来处理。例如画线时,只需GDI调用 SetPixel数次,并适当地调 整和Y坐标。在实际情况中,也的确可以仅使用SetPixel和GetPixel函数进行 您需要的任何绘制。您也可以在这些函数的基础上设计出简洁和构造良好的图 形编程系统。唯一的问题是性能。如果一个函数通过几次调用才能到达 SetPixel函数,那么它运行起来会非常慢。如果一个图形系统画线和进行其他 复杂的图形操作是在设备驱动程序的层次上,它就会更有效得多,因为设备驱 动程序对完成这些操作的代码进行了优化。此外,一些视频适配器卡包含了图 形协处理器,它允许视频硬件自己绘制图形。 五 文本和字体: 文本输出是应用程序经常需要实现的功能。 许多程序的运行结果都必须以文本输出形式 显示;文字处理程序更是主要以文本作为处理 的对象。所以,程序员掌握文本输出的基本 原理和技术具有重要的意义。 文本输出需要解决的问题是如何修改显示文本 的字体、颜色和大小,以及如何协调在不同设备 上显示文本的差异。 文本的设备描述表属性: 设备描述表( Device Context)是一个决定输出的位置和外形 的属性集合。在用户编制的应用程序中可以通过设备描述表句 柄间接地读取设备描述表。当程序为设备描述表申请一个句柄 时,系统就自动生成了一个设备描述表,生成的设备描述表包 含了所有属性的默认值。 背景色定义了填充字符,以及填充字符间区域的颜色。背景模 式有两种取值:OPAQUE和 TRANSPARENT。默认值为 OPAQUE表示背景颜色有效;如果设定为TRANSPARENT,则 表示关闭背景色。字符间距和文本颜色分别表示两个字符间的 间隔和字体的颜色。 字体描述了所显示字符的大小、外形和种类,也就是说字体包 含了字符集中每个字符属性的抽象描述。字体分为两种基本类 型:物理字体和逻辑字体。GDI(图形设备接口)常用的字体 如表所示。 六、键盘和鼠标: 在Microsoft Windows 中,键盘和鼠标是两个标准的用户输入源 ,在一些交叠的操作中通常相互补充使用。当然,鼠标在今天的 应用程序中比10年前使用得更为广泛。甚至在一些应用程序中, 我们更习惯于使用鼠标,例如在游戏、画图程序、音乐程序,以 及Web创览器等程序中就是这样。然而,我们可以不使用鼠标, 但绝对不能从一般的PC中拆掉键盘。 相对于个人计算机的其他组件,键盘有非常久远的历史,它 起源于1874年的第一台Remington打字机。早期的计算机程序员 用键盘在Hollerith卡片上打孔,以后在哑终端上用键盘直接与大 型主机通讯。PC上的键盘在某些方面进行了扩展,包括了功能 键、光标定位键和(通常都带有的)单独的数字键盘,但它们的 输入原理基本相同。 Windows程序获得键盘输入的方式:键盘输入以消息的形式传递 给程序的窗口过程。 实际上,第一次学习消息时,键盘就是一个明显的例子:消息应 该传递给应用程序的信息类型。 Windows用8种不同的消息来传递不同的键盘事件。这好像太多 了,但是(就像我们所看到的一样)程序可以忽略其中至少一半 的消息而不会有任何问题。并且,在大多数情况下,这些消息中 包含的键盘信息会多于程序所需要的。处理键盘的部分工作就是 识别出哪些消息是重要的,哪些是不重要的。 虽然应用程序在很多情况下可以通过鼠标实现信息的输入,但到 现在为止键盘仍然是PC机中不可替代的重要输入设备。 用键盘当作输入设备,每当用户按下或释放某一个键时,会 产生一个中断,该中断激活键盘驱动程序KEYBOARD.DRV来对 键盘中断进行处理。KEYBOARD.DRV程序会根据用户的不同操 作进行编码,然后调用Windows用户模块USER.EXE生成键盘消 息,并将该消息发送到消息队列中等候处理。 1扫描码和虚拟码 扫描码对应着键盘上的不同键,每一个键被按下或释放时, 都会产生一个唯一的扫描码作为本身的标识。扫描码依赖于具体 的硬件设备,即当相同的键被 按下或释放时,在不同的机器上 可能产生不同的扫描码。在程序中通常使用由Windows系统定义 的与具体设无关的虚拟码。在击键产生扫描码的同时,键盘驱 动程序KEYBOARD.DRV截取键的扫描码,然后将其翻译成对应的 虚拟码,再将扫描码和虚拟码一齐编码形成键盘消息。所以, 最后发送到消息队列的键盘消息中,既包含了扫描码又包含了 虚拟码。 输入焦点: 同一时刻,Windows中可能有多个不同的程序在运 行,也就是说有多个窗口同时存在。 这时,键盘由多个窗口共享,但只有一个窗口能够接收到键盘 消息,这个能够接收键盘消息的窗口被称为拥有输入焦点的窗 口。 拥有输入焦点的窗口应该是当前的活动窗口,或者是活动窗 口的子窗口,其标题和边框会以高亮度显示,以区别于其他窗 口。拥有输入焦点的也可以是图标而不是窗口,此时,Windows 也将消息发送给图标,只是消息的格式略有不同。 窗口过程可以通过发送WM_SETFOCUS和 WM_KILLFOCUS消 息使窗体获得或失去输入焦点。程序也可以通过捕获 WM_SETFOCUS和WM_KILLFOCUS消息来判断窗体何时获得 或失去输入焦点。其中WM_SETFOCUS消息表示窗口正获得输 入焦点,WM_ KILLFOCUS消息表示窗口正失去输入焦点。 键盘消息:键盘消息分为系统键消息和非系统键消息。 系统键消息是指由Aft键和其他键组合而产生的按键消息。当系 统键被按下时产生WM_ SYSKEYDOWN消息,当系统键被释放 时产生WM_SYSKEYUP消息。 Aft键与其他键形成的组合键通常 用于对程序菜单和系统菜单进行选择,或用于在不同的程序之间 进行切换。因此,系统键消息应该交由Windows进行处理,用户 所编制的程序一般不处理系统键消息,而是将这些消息交由 DefWindowProc函数进行处理。如果用户想对系统键消息进行处 理,应该在处理完这些消息后,再将其发送给DefWindowProc函 数,使得Windows系统能够正常工作。 某些击键消息可以被转换成字符消息,例如字母键、数字键等 。而有些键只能产生按键消息而没有字符消息,例如 Shift键、 Insert键等。消息循环中的 TranslateMessage函数可以实现从击 键消息向字符消息的转化。 当GetMessage函数捕获一个WM_SYSKEYDOWN消息或 WM_KEYDOWN消息后,TranslateMessage函数判断产生该消息 的键是否能够被转换成字符消息,如果能,就将该消息转换成字 符消息,再通过DispatchMessape函数将转换后的字符消息发送到 消息队列中去。 Windows的消息一般是通过一个MSG结构体变量传送给消息处 理函数的。对于键盘消息, MSG结构体变量的各个域中较重要 的是 lParam域和 wParam域。 wParam域用于保存按键的虚拟键代 码或字符的ASCII码。对于非字符消息,wParam域保存按键的虚 拟健代码;对于字符消息,wParam域不保存字符的ASCII码。 lParam域则用于保存击键时产生的附加信息,实际上一个32位的 lParam变量被分为六部分,记录了以下相关信息:重复次数、 OEM扫描码、扩展键标志、关联键标志、前一击键状态和转换 状态。lParam域各位的含义如表所示。 对于非字符消息,wParam域保存按键的虚拟健代码;对于字符消 息,wParam域不保存字符的ASCII码。lParam域则用于保存击键 时产生的附加信息,实际上一个32位的lParam变量被分为六部分 ,记录了以下相关信息:重复次数、OEM扫描码、扩展键标志、 关联键标志、前一击键状态和转换状态。lParam域各位的含义如 表所示。 随着Windows操作系统的流行,鼠标因为其精确 定位和操作方便的优点而成为计算机不可缺少的 输入设备。 一、鼠标的基础知识 本节将介绍在程序中用鼠标作为输入设备的方法和技巧。 1鼠标操作和鼠标消息 用户在使用鼠标操作的过程中,经常会使用的主要方式有五种 ,如表所示。 其中,前三种操作是最为基本的操作,可以 产生Windows内部定义的消息,并通过这些 消息来判断用户具体执行了哪种操作。 Windows定义的鼠标消息共有20条,其中 非编辑区的鼠标消息一般交由系统处理,程序 只处理编辑区内的鼠标消息。编辑区内的鼠标消息共有10条, 如表所示。 对于前表所列的鼠标操作中的最后两种,不能 直接使用Windows定义的消息来判断,只能通过 编程,将多种消息和数据组合之后判断。例如, 判断用户是否按下鼠标左键之后进行拖动操作 可以通过以下程序段来实现,用case语句来实现: case WM_MOUSEMOVE: if (wParam 利用子窗体(WS_CHILD)风格建立的子 窗体只能在其父窗体的客户区内; 利用弹出式窗体(WS_POPUP) 风格或层叠式(WS_OVERLAPPED)窗体风格 建立的子窗体可以子左面上任意移动。 第二节 相关函数 一SetWindowText()函数 1.功能: 用于设置窗体标题条标题。 2.函数声明: BOOL SetWindowText(HWND hWnd, LPCTSTR lpString); 3.参数: hWnd: 窗体句柄; lpString:指向标题字符串指针。 4.返回值: 如果成功,返回TRUE,否则返回FALSE。 二wsprintf()函数 1.功能: 用于内部文件写操作。 2.函数声明: int wsprintf(LPTSTR lpOut, LPCTSTR lpFmt, .); 3.参数: lpOut:内部文件指针; lpFmt:可是说明字符串; .: 变量表。 4.返回值: 如果成功,返回内部文件长度,否则0。 6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZoWkThPeMbJ7G4D1z- w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z- w&t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z- w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%sWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A- w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWleMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A- x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A- x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z&s!pXmUjRfOcK9H6E2B+y(u%rZoWlThQeNbJ8G4D1A-w*t$qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgOdLaI6F3C0y)v%s#pXlUiRfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z- w&t!qYmVjRgOdL9I6F3B0y)v%s#oXlUiQfNcK8H5D2A+x*u$rZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnWkShPdMaJ7F4C1z)w&s!pYmUjRgOcL9H6E3B+y(v%r#oWlTiQeNbK8G5D1A-x*t$qZnVkSgPdMaI7F4C0z)v&s!pXmUjRfOcL9H6E2B+y(u%r#oWlThQeNbJ8G5D1A-w*t$qYnVkSgPdLaI7F3C0z)v&s#pXmUiRfOcK9H5E2B+x(u%rZoWkThQeMbJ8G4D1z-w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#oXlUiMbJ8G4D1A- w*t!qYnVjSgPdLaI6F3C0y)v&s#pXlUiRfNcK9H5E2A+x(u$rZoWkThPeMbJ7G4D1z-w&t!qYmVjSgOdL9I6F3B0y)v%s#pXlUiQfNcK8H5E2A+x*u$rZnWkThPeMaJ7G4C1z-w&t!pYmVjRgOdL9I6E3B0y(v%s#oXlTiQfNbK8H5D2A-x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B+y(v%r#oXlTiQeNbK8G5D2A-x*t$qZnVkShPdMaI7F4C0z)w&s!pXmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbJ8G5D1A-x*t$qYnVkSgPdMaI7F3C0z)v&s!pXmUiRfOcK9H6E2B+x(u%rZoWlThQeMbJ8G4D1A- w*t!qYnVjSgPdLaI7F3C0y)v&s#pXmUiRfNcK9H5E2B+x(u$rZoWkThQeMbJ7G4D1z-w*t!qYmVjSgOdLaI6F3B0y)v%s#pXlUiQfNcK8H5E2A+x(u$rZnWkThPeMbJ7G4C1z-w&t!qYmVjRgOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7F4C1z)w&t!pYmUjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVOdL9I6F3B0y(v%s#oXlUiQfNbK8H5D2A+x*u$qZnWkShPeMaJ7G4C1z)w&t!pYmVjRgOcL9I6E3B0y(v%r#oXlTiQfNbK8G5D2A-x*u$qZnVkShPdMaJ7F4C0z)w&s!pYmUjRfOcL9H6E3B+y(u%r#oWlTiQeNbK8G5D1A- x*t$qZnVkSg

温馨提示

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

评论

0/150

提交评论