GDI 编程基础简介
今天准备重新对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 编程基础简介的更多相关文章
- GDI编程基础
窗口和视口 视口是基于设备的采用的是设备坐标(单位:像素),窗口是基于程序的采用的是逻辑坐标(单位:像素/毫米/厘米等). 在默认的映射模式下,视口是与窗口等同的.但是如果改变其映射模式,则其对应的单 ...
- C#GDI+编程基础(一:Graphics画布类)
GDI+存在的意义:将变成与具体硬件实现细节分开. GDI+步骤:获取画布,绘制图像.处理图像 命名空间: using System.Drawing;//提供对GDI+基本图形功能的访问 using ...
- C#GDI+编程基础(二)
pen类:绘制指定宽度和样式的直线.使用DashStyle属性绘制几种虚线,可以使用各种填充样式(包括纯色和纹理)来填充Pen绘制的直线,填充模式取决于画笔或用作填充对象的纹理. 创建画笔: //用指 ...
- 现代3D图形编程学习-基础简介(2) (译)
本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...
- 现代3D图形编程学习-基础简介(1) (译)
本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(1)系统简介和编程基础
SAS学习笔记之<SAS编程与数据挖掘商业案例>(1)系统简介和编程基础 1. SAS系统简介 1.1 SAS是先编译后执行的语言,data步标志着编译的开始. 数据指针:当前内存缓存区, ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- C#_GDI+详细教程(图形图像编程基础)
第7章 C#图形图像编程基础 本章主要介绍使用C#进行图形图像编程基础,其中包括GDI+绘图基础.C#图像处理基础以及简单的图像处理技术. 7.1 GDI+绘图基础 编写图形程序时需要使用GDI( ...
- GDI编程
图形设备接口(GDI)是一个可执行程序,它接受Windows应用程序的绘图请求(表现为GDI函数调用),并将它们传给相应的设备驱动程序,完成特定于硬件的输出,象打印机输出和屏幕输出.GDI负责Wind ...
随机推荐
- 第九届极客大挑战 部分WP
CODE 和0xpoker分0day 百度 取石子游戏. https://blog.csdn.net/qq_33765907/article/details/51174524 已经说得很详细了,慢慢来 ...
- IOS架构
iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统. 1,Core OS: 是用FreeBSD和Mach所改写的Darwin, 是开源.符合POSI ...
- hnust 可口可乐大促销
问题 B: 可口可乐大促销 时间限制: 1 Sec 内存限制: 128 MB提交: 653 解决: 323[提交][状态][讨论版] 题目描述 最近可口可乐在搞大促销活动,1瓶可乐只要1元钱.而且 ...
- [转]Ubuntu下添加开机启动脚本
作者: 王恒 发表于 2012年 11月 5日 1.方法一,编辑rc.loacl脚本 Ubuntu开机之后会执行/etc/rc.local文件中的脚本, 所以我们可以直接在/etc/rc.local中 ...
- 【转】UGUI VS NGUI
原文:http://gad.qq.com/college/articledetail/7191053 注[1]:该比较是基于15年-16年期间使用NGUI(3.8.0版本)与UGUI(4.6.9版本) ...
- Generator与async/await与Generator的模拟
Generator 函数有多种理解角度.语法上,首先可以把它理解成,Generator 函数是一个状态机,封装了多个内部状态. 执行 Generator 函数会返回一个遍历器对象,也就是说,Gener ...
- 【SPOJ1297】Palindrome (SA+RMQ)
求最长回文串.把原串翻转后,加在原串后面,中间插入一个辨别字符.然后求SA,Height.然后枚举每个字母作为回文串中心,分长度为奇数和偶数去讨论:奇数求 suffix(i)和suffix(n-i+1 ...
- SolrCloud在linux上的搭建
SolrCloud在linux上的搭建 1.环境准备 三台虚拟机的环境准备: 1. 更改主机名 2. 关闭selinux 3. 关闭防火墙 4. 更改主机名与ip地址的映射 5. 时钟同步 6. ss ...
- 重绘(repaints)与重排(reflows)
当页面布局和几何属性改变时就需要"重排" 避免在修改样式的过程中使用 offsetTop, scrollTop, clientTop, getComputedStyle() 这些属性, 它们都会刷新渲 ...
- git - 搭建最简单的git server
以下操作都在 centos7 下进行,但同样适用于centos 6. 1. 安装git-core yum -y install git 添加git用户,用于启动管理git仓库 useradd git ...