Windows API-GDI入门基础知识详解(1)
日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]-
什么是GDI?
GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。
GDI是如何实现输出的?
要想在屏幕或者其它输出设备上输出图形或者文字,那么我们就必须先获得一个称为设备描述表( DC:Device Context)的对象的句柄,以它为参数,调用各种GDI函数实现各种文字或图形的输出。
设备描述表是GDI内部保存数据的一种数据结构,此结构中的属性内容与特定的输出设备(显示器,打印机等)相关,属性定义了GDI函数的工作细节,在稍后我们将看到如何使用TextOut函数输出文字,在这里属性确定了文字的颜色,x坐标和y坐标映射到窗口显示区域的方式等。设备描述表句柄一旦获得,那么系统将使用默认的属性值填充设备描述表结构。
如果有必要,我们可以使用一些GDI函数获取和改变设备描述表中的属性值。
什么是有效矩形什么是无效矩形?
当应用程序接受到WM_PAINT消息后通常就准备更新正个显示区域,但是通常只需要更新一个比较小的区域而不是整个区域,这种情况通常出现在当应用程序的主窗口的一部分被一个对话框覆盖,需要重画的只是被覆盖的矩形区域(见下图)。

EXE示例程序下载:点击这里下载(90K, winzip压缩文件)
阴影以下的部分就是需要更新的矩形区域,该区域就是我们所说的无效区域,正是因为此区域的存在,系统才会向消息队列中放入一个WM_PAINT消息。
Windows内部为每个窗口都保留了一个绘图结构(PAINTSTRUCT),它包含了包围无效区域的最小矩形的坐标和一些其它信息,需要注意的是当窗口消息处理函数在处理WM_PAINT消息之前显示区域中出现了另一个无效区域,那么Windows会计算出一个包围两个无效区域的新无效区域,并把这种变化保存在绘图结构(PAINTSTRUCT)中,Windows是不会同时把多个WM_PAINT消息同时放到消息队列中的。
窗口消息处理函数是通过调用InvalidateRect函数使窗口显示区域内的矩形变为无效的,如果消息队列中已经存在一个WM_PAINT消息,那么Windows将计算出新的无效矩形,在接收到WM_PAINT消息的时候,窗口消息处理函数可以获得无效矩形的座标,通过调用GetUpdateRect,可以在任何时候获得这些坐标。
更多内容请看Linux基础知识 Solaris基础知识入门 Windows操作系统安全集专题,或
如何获取或释放设备描述表句柄?
当应用程序需要绘图的时候,必须先获取设备描述表句柄,绘图操作结束后必须释放设备描述表句柄。我们有两种方法获取和释放设备描述表句柄。
1. 使用BeginPaint和Endpaint函数
通常是在应用程序接收到WM_PAINT消息,也就是需要更新窗口的显示区域的时候调用BeginPaint函数获取设备描述表句柄的,使用完后调用Endpaint函数释放设备描述表句柄。
他们的函数原型为:
HDC BeginPaint(
- [1] [2] [3] 下一页
-
- Windows API-GDI入门基础知识详解(1) 相关文章:
- ·Windows API-GDI入门基础知识详解(1)
- Windows API-GDI入门基础知识详解(1) 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:Visual C++ 入门精解
下一篇:Windows API-GDI入门基础知识详解(3)
精品推荐
热点TOP10
- ·用c#监控网络流量
- ·C#编写的windows计算器-源代码
- ·C #中的几个线程同步对象方法
- ·飞机订票系统设计
- ·C/C++笔试、面试题目大汇总
- ·《俄罗斯方块》程序编写详解
- ·Windows API-GDI入门基础知识详解(2)
- ·socket编程原理
- ·打字游戏
- ·七年IT奋斗纪实及感悟
- ·无废话C#设计模式之九:Proxy
- ·牛顿和拉格朗日插值算法
- ·VC++动态链接库编程之MFC扩展 DLL
- ·C# 操作文件
- ·如何用C#编写文本编辑器
- ·c#操作word表格
- ·编程特例篇——LOGO语言
- ·Raw Socket(原始套接字)实现Sniffer(嗅探)
- ·C#实现窗口最小化到系统托盘
- ·C# 学习使用ErrorProvider
特别推荐
- ·C#程序开发中的常用函数汇总
- ·C#数据库操作的三种经典用法
- ·C/C++笔试、面试题目大汇总
- ·Beej的网络socket编程指南
- ·socket编程原理
- ·C语言的常用库函数使用方法分析及用途
- ·在C语言中如何处理时间和日期
- ·C++设计模式之Singleton
- ·VC++动态链接库编程之MFC扩展 DLL
- ·TCP/IP网络重复型服务器通信软件的设计
- ·DirectX游戏开发入门
- ·经典与现代的结合:在MFC中集成RAD .NET框架
- ·Windows API-GDI入门基础知识详解(2)
- ·Visual C++ 入门精解
- ·C#基础概念二十五问
- ·用C#实现pdf文件的完整性验证
- ·成为嵌入式程序员应知道的0x10个问题
- ·TCP/IP编程实现远程文件传输
- ·几个C#编程的小技巧
- ·C# 编码规范和编程好习惯
