今天准备重新对GDI的知识进行回顾一下,以便加深认识。

一、GDI

  在进行Windows编程时,可能经常会用到设备描述表的类型句柄,例如,最厂家的HDC,它就是图像设备描述类型句柄。因为GDI的绘图函数基本上都是有状态的,因此GDI所有的函数都要求一个这样的图形设备描述类型的句柄——HDC。而一个图像设备描述表实际上就是对一种安装在机器上的图形卡的描述在使用句柄时,其实就是对具体的一种设备进行操作。对于GDI的任何函数的调用,这个设备的信息是必需的。

  

  从本质上来说,提供指向任何GDI函数的HDC句柄,都是用来访问一个函数操作设备的重要信息。这就是需要一个图形描述表的原因。

  图形设备描述表要跟踪编程过程中任何可能改变的软件设置。比如,在GDI中被大量使用的字体、画笔、画刷、线、点、矩形等类型。GDI使用这些基本数据类型来绘制任何图形,即使使用的画笔颜色不是视频卡的默认颜色,那么设备描述表也会跟踪它。因此,图形设备描述表不仅是硬件的描述,而且还是记录和保存设置的信息库

二、CDC类

  CDC类就是MFC把DC(设备描述环境)和一些GDI函数填充装到一起的一个集合。它是CObject的直接派生类。并且从CDC又派生出了许多其他类,如最常用的窗口客户区DC所对应的CClientDC类,OnPaint和OnDraw消息响应函数的输入参数中使用的CPaintDC类,图元文件对应的CMetaFileDC类和整个窗口所对应的CWindowDC类。CDC类中有许多成员函数,可以用来设备各种绘图环境、属性和参数,以及绘制各种图形和图像。

  常见的函数如下:

  (1)用于获取DC句柄的函数GetDC()

    每次调用GetDC函数所获得的DC,都是一个全新的临时默认DC,具有默认的绘图环境和设置。它不能用任何变量临时保存,而且GetDC后原来选入的各种GDI对象全部作废,原来设置的各种状态也失效,一切都要从头开始。

  (2)用于获取DC安全句柄的函数GetSafeHdc()

    其获得的DC在窗口的存在期间内一直是有效的。

  (3)用于释放DC的函数ReleaseDC()

三、GDI对象

3.1 画笔类

使用构造函数创建

CPen(

int nPenStyle,

int nWidth,

COLORREF crColor

用CreatePen函数创建画笔对象

HPEN CreatePen(int fnPenStyle, int nWidth, COLORREF crColor);

用CETStockObject函数直接创创建画笔

HGDIOBJ GetStockObject ( int fnObject )

用CreatePenIndirect函数创建

HPEN CreatePenIndirect( const LOGPEN * logopen );

3.2 画刷类

CBrush(

int fnStyle

COLOREF crColor

HBRUSH CreateHatchBrush(int fnStyle, COLORREF crColor);

GetStockObject()

HBRUSH CreateBrushIndirect(CONST LOGBRUSH *lplb);

typedef struct tagLOGBRUSH

{

  UINT lbStyle;

  COLORREF lbColor;

  LONG lbHatch;

} LOGBRUSH

3.3 字体类

3.4 点类

typedef sturct tagPOINT

{

  LONG x;

  LONG y;

}POINT;

3.5 大小类

typedef struct tagSIZE

{

  LONG cx;

  LONG cy;

}SIZE;

参考文章:

1. Visual C++ 典型模块与项目实战大全

GDI 编程基础简介的更多相关文章

  1. GDI编程基础

    窗口和视口 视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等). 在默认的映射模式下,视口是与窗口等同的.但是如果改变其映射模式,则其对应的单 ...

  2. C#GDI+编程基础(一:Graphics画布类)

    GDI+存在的意义:将变成与具体硬件实现细节分开. GDI+步骤:获取画布,绘制图像.处理图像 命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using ...

  3. C#GDI+编程基础(二)

    pen类:绘制指定宽度和样式的直线.使用DashStyle属性绘制几种虚线,可以使用各种填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理. 创建画笔: //用指 ...

  4. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  5. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

  6. SAS学习笔记之《SAS编程与数据挖掘商业案例》(1)系统简介和编程基础

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(1)系统简介和编程基础 1. SAS系统简介 1.1 SAS是先编译后执行的语言,data步标志着编译的开始. 数据指针:当前内存缓存区, ...

  7. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  8. C#_GDI+详细教程(图形图像编程基础)

    第7章  C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1  GDI+绘图基础 编写图形程序时需要使用GDI( ...

  9. GDI编程

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

随机推荐

  1. uoj206 [APIO2016]最大差分

    ref #include "gap.h" #include <iostream> #include <cstdio> using namespace std ...

  2. Python抓取视频内容

    Python抓取视频内容 Python 是一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.Python语法简洁而清晰,具 ...

  3. python - 接口自动化测试 - basic_data - 基础数据参数化方法封装

    # -*- coding:utf-8 -*- ''' @project: ApiAutoTest @author: Jimmy @file: basic_data.py @ide: PyCharm C ...

  4. 【bzoj4668】冷战 并查集按秩合并+朴素LCA

    题目描述 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争 ...

  5. bzoj4030【HEOI2015】小L的白日梦

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=4030 sol  :orz Yousiki http://www.cnblogs.com/you ...

  6. bzoj1086【SCOI2005】王室联邦

    题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1086 sol  :这题水水啊,直接大力DFS就行了 首先当且仅当x<B时无解 对于以x为 ...

  7. 论文笔记《Notes on convolutional neural networks》

    这是个06年的老文章了,但是很多地方还是值得看一看的. 一.概要 主要讲了CNN的Feedforward Pass和 Backpropagation Pass,关键是卷积层和polling层的BP推导 ...

  8. codevs 1081 线段树练习 2 区间更新 单点查询 无lazy

    题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有数都增加X 2:询问第i个数是什么? 输入描述 Input Description 第一行一个正整数n,接下来n行n ...

  9. Java 学习(1): windows java 运行& 环境配置

    Java 文件的运行 如下,创建了一个 名为"HelloWorld.java" 的 Java 文件: public class HelloWorld { public static ...

  10. 判断是手机端还是pc端

    <script type="text/javascript"> if (window.location.toString().indexOf('pref=padinde ...