图形设备接口(GDI,Graphics Device Interface)负责在显示器和打印机上显示图形。GDI 是由几
百个函数和一些相关的数据类型、宏和结构构成的。
Windows 98/NT 中的图形主要由GDI32.DLL 动态链接库输出的函数来处理。在Windows 98 中,
这个GDI32.DLL 实际是利用16 位GDI.EXE 动态链接库来执行函数。在Windows NT 中,GDI.EXE
只用于16 位的程序。
因为PC 兼容机种上可以连接许多种不同的图形图像设备,所以GDI 的主要目的之一是支持与设
备无关的图形。Windows 程序应该能够毫无困难地在Windows 支持的任意一种图形输出设备上执行,
GDI 通过将程序和不同输出设备的特性隔离开来的方法达到这一目的。
当用户想在一个图形输出设备上绘图时,首先必须获得一个设备内容的句柄。将句柄传回给程序
时,Windows 就给了用户使用设备的权限,然后在GDI 函数中将这个句柄作为一个参数,用来标识在
其上进行绘图的设备。
设备内容中包含许多确定GDI 函数如何在设备上工作的属性,这些属性允许传递给GDI 函数的
参数只包含起始坐标或者尺寸信息,而不必包含Windows 在设备上显示对象时需要的所有其他信息。
例如,当调用TextOut 时,只需要在函数中给出设备内容句柄、起始坐标、文字和文字的长度,而不
必指定字体、文字颜色、文字后面的背景色彩以及字符间距。因为这些属性都是设备内容的一部分。

设备内容
Windows 提供了几种取得设备内容句柄的方法。如果在处理一个消息时取得了设备内容句柄,应
该在退出窗口函数之前释放它。一旦释放了句柄,它就不再有效了。但是对于打印机设备内容句柄,
规则就没有这么严格。
最常用的取得并释放设备内容句柄的方法是,在处理WM_PAINT 消息时,使用BeginPaint 和
EndPaint:

hdc = BeginPaint (hwnd, &ps) ;
…………
…………
EndPaint (hwnd, &ps) ;

图形设备接口(GDI)的更多相关文章

  1. C++ GDI图形设备接口

    一.概念 1. GDI:(Graphics Device Interfase)图形设备接口,是一个应用程序与输出设备之间的中介. 一方面,GDI向应用程序提供一个与设备无关的编程环境,另一方面,它又以 ...

  2. OSG图形设备接口GraphicsContext

    1.图形设备与相机 在Camera类的成员函数中,setGraphicContext()函数的工作是设置相机对应的图形设备对象,换句话说,下面要介绍的GraphicsContext类就是图形设备对象的 ...

  3. 第四章 Windows的图形设备接口及Windows绘图 P83 4-6

    实验(实习)名称  图形程序设计及其应用  实验(实习)日期 一.实验目的 1.熟悉图形设备接口的概念及其应用. 二.实验内容及步骤  实验任务 1.熟悉基于图形应用的程序设计: 2.掌握刷新技术及其 ...

  4. Windows的图形设备接口与Windows绘图

    本次学习目标 理解DC, 映像模式, 坐标系统, 窗口和视口; 学习获取绘图工具(画笔/画刷)的句柄, 设置颜色, 能定义映像模式; 会使用常用的绘图函数. 编写程序: 在屏幕上出现一个圆心沿正弦曲线 ...

  5. MFC GDI绘图基础

    一.关于GDI的基本概念 什么是GDI? Windows绘图的实质就是利用Windows提供的图形设备接口GDI(Graphics Device Interface)将图形绘制在显示器上. 在Wind ...

  6. GDI编程

    图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Wind ...

  7. GDI编程小结

    图形设备接口(GDI)是一个可运行程序,它接受Windows应用程序的画图请求(表现为GDI函数调用),并将它们传给对应的设备驱动程序,完毕特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Wind ...

  8. VC++学习之GDI概述

    VC++学习之GDI概述 图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏 ...

  9. MFC绘图相关GDI工具对象和函数介绍

    在利用MFC进行界面编程时,除了需要熟悉各种类型控件的操作外,还会经常遇到图形绘制和显示的问题,比如时频分析界面.图像处理界面等.处理这些软件界面开发问题时,不可避免地需要用到一系列GDI工具对象和相 ...

随机推荐

  1. php反射机制获取未知类的详细信息

    使用ReflectionClass就可以获取未知类的详细信息 demo: require("hello.php"); $class = new ReflectionClass(&q ...

  2. iPerf - The network bandwidth measurement tool

    What is iPerf / iPerf3 ? iPerf3 is a tool for active measurements of the maximum achievable bandwidt ...

  3. 学习C++11的一些思考和心得(1):lambda,function,bind和委托

     1.lambda表达式 lanbda表达式简单地来讲就是一个匿名函数,就是没有名称的函数,如果以前有接触过python或者erlang的人都比较熟悉这个,这个可以很方便地和STL里面的算法配合 st ...

  4. Session和Cookie深度剖析

    Session和Cookie的区别 具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案.同时我们也看到,由于采用服务器端保持状态的方案在客户端 ...

  5. Servlet间的跳转

       Forward        转向(Forward)是通过RequestDispatcher对象的forward(HTTPServletRequest req, HttpSerletRespon ...

  6. Android APP高效开发的十大建议

    在使用Android开发APP过程中,为什么确保最优化.运行流畅且不会使Android系统出现问题至关重要呢?因为影响APP产品效率的每一个问题,如:耗电或内存占用情况等,都是关乎APP成功与否关键因 ...

  7. PLSQL_性能优化系列05_Oracle Hint提示

    2014-06-20 Created By BaoXinjian

  8. PLSQL_Oracle物化视图Material View的基本概念和用法 (概念)

    2014-06-08 Created By BaoXinjian

  9. unity c#

    gameObject //获取当前脚本挂载到的游戏对象 在Unity中就算使用了C#进行编写脚本,要输出时不能使用Console类,应当使用print();或者Debug.log(); transfo ...

  10. ucos-内存管理:

    注意:一个内存分区至少含有2个内存块(块的大小至少能满足一个指针大小) 1先定义一个内存块结构指针OS_MEM *buffMEM,在定义一个而为指针A[m][n] 2创建内存分区:buffMEM=OS ...