Windows 编程基础(九)

图形装置介面(GDI)
GDI结构
图形装置介面(GDI:Graphics Device Interface)是 Windows 的子系统,它负责在视讯显示器和印表机上显示图形。
GDI 原理
GDI 的主要目的之一是支援与装置无关的图形。Windows 程式应该能够毫无困难地在 Windows支援的任意一种图形输出设备上执行,GDI 通过将您的程式和不同输出设备的特性隔离开来的方法来达到这一目的。
GDI 通常是一个静态的显示系统。

GDI 函式呼叫
组成 GDI 的几百个函式呼叫可以分为几大类:
1、取得(或者建立)和释放(或者清除)装置内容的函式
GetDC 和 RealseDC非 WM_PAINT 的讯息处理期间,在绘图时获取装置内容代号。
2、取得有关装置内容资讯的函式
GetTextMetrics函式来取得有关装置内容中目前所选字体的尺寸资讯。
3、绘图函式
TextOut 函式在视窗的显示区域显示一些文字
4、设定和取得装置内容参数的函式
SetTextColor 来指定 TextOut(或者其他文字输出函式)所绘制的文字色彩。
SetTextAlign指定字串的开始位置应该在字串的右边而不是内定的左边。
对於所有的 Set 函式,都有相应的 Get 函式,以允许您取得目前装置内容属性。
5、使用 GDI 物件的函式
CreatePen、 CreatePenIndirect 或 ExtCreatePen 函式中指定这些特徵来建立一个逻辑画笔,这些函式传回一个逻辑画笔的代号。

GDI 基本图形
图形型态本身可以被分为几类,通常被称为【基本图形】,它们是:
1、直线和曲线
2、填入区域
3、点阵图
4、文字

其他部分
GDI 的其他部分无法这么容易地分类,它们是:
1、映射模式和变换
2、Metafile
3、绘图区域
4、路径
5、剪裁
6、调色盘
7、列印

装置内容
想在一个图形输出设备上绘图时,必须获得一个装置内容(或者 DC)的代号。将代号传回给程式时,Windows 就给了您使用设备的许可权。然後您在 GDI 函式中将这个代号作为一个参数,向Windows 标识您想在其上进行绘图的设备。
装置内容中包含许多确定 GDI 函式如何在设备上工作的目前「属性」,这些属性允许传递给 GDI 函式的参数只包含起始座标或者尺寸资讯,而不必包含Windows 在设备上显示物件时需要的所有其他资讯。

取得装置内容代号
Windows 提供了几种取得装置内容代号的方法。如果在处理一个讯息时取得了装置内容代号,应该在退出视窗函式之前释放它(或者删除它)。
最常用的取得并释放装置内容代号的方法是,在处理 WM_PAINT 讯息时,使
用 BeginPaint 和 EndPaint 呼叫
hdc = BeginPaint (hwnd, &ps) ;
其他行程式
EndPaint (hwnd, &ps) ;
Windows 程式还可以在处理非 WM_PAINT 讯息时取得装置内容代号:
hdc = GetDC (hwnd) ;
其他行程式
ReleaseDC (hwnd, hdc) ;
这个装置内容适用於视窗代号为 hwnd 的显示区域。这些呼叫与 BeginPaint和 EndPaint 的组合之间的基本区别是,利用从 GetDC 传回的代号可以在整个显示区域上绘图。当然, GetDC 和 ReleaseDC 不使显示区域中任何可能的无效区域变成有效。
Windows 程式还可以取得适用於整个视窗(而不仅限於视窗的显示区域)的装置内容代号:
hdc = GetWindowDC (hwnd) ;
其他行程式
ReleaseDC (hwnd, hdc) ;
这个装置内容除了显示区域之外,还包括视窗的标题列、功能表、卷动列和框架(frame)。GetWindowDC 函式很少使用,如果想尝试用一用它,则必须拦截处理 WM_NCPAINT 讯息,Windows 使用该讯息在视窗的非显示区域上绘图。
BeginPaint、GetDC 和 GetWindowDC 获得的装置内容都与视讯显示器上的某个特定视窗相关。取得装置内容代号的另一个更通用的函式是 CreateDC:
hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;
其他行程式
DeleteDC (hdc);
在视窗之外写入画面一般是不恰当的,但对於一些不同寻常的应用程式来说,这样做很方便。
有时您只是需要取得关於某装置内容的一些资讯而并不进行任何绘画,在这种情况下,您可以使用 CreateIC 来取得一个「资讯内容」的代号,其参数与CreateDC 函式相同,例如:
hdc = CreateIC (TEXT (“DISPLAY”), NULL, NULL, NULL) ;
您不能用这个资讯内容代号往设备上写东西。
使用点阵图时,取得一个「记忆体装置内容」有时是有用的:
hdcMem = CreateCompatibleDC (hdc) ;
其他行程式
DeleteDC (hdcMem) ;
metafile 是一些 GDI 呼叫的集合,以二进位形式编码。您可以通过取得 metafile 装置内容来建立 metafile:
hdcMeta = CreateMetaFile (pszFilename) ;
其他行程式
hmf = CloseMetaFile (hdcMeta) ;
在 metafile 装置内容有效期间,任何用 hdcMeta 所做的 GDI 呼叫都变成metafile 的一部分而不会显示。在呼叫 CloseMetaFile 之後,装置内容代号变为无效,函式传回一个指向 metafile(hmf)的代号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值