设备上下文:是由GDI创建、用来代表设备连接的数据结构。
DC的主要功能有:
(1)允许应用程序使用一个输出设备。
(2)提供Windows应用程序、设备驱动和输出设备之间的连接。
(3)保存当前信息,例如,在一个窗口内绘图时使用的颜色,画笔的宽度、画刷的类型,绘制模式调色盘信息、映射模式以及其他的Windows必须知道怎么显示图形的属性。
(4)保存窗口剪切区域,限制程序输出到输出设备中窗口覆盖的区域。
着色描述表:
与其他应用程序一样,OpenGL应用程序也必须应用DC。不过,我们将其称为着色描述表。着色描述表保在了与系统发生联系的重要信息。一个应用程序必须有着色描述表。着色描述表含很多信息,如模型视图信息等。
设备描述表中包含许多确定GDI函数如何在设备上工作的当前“属性”,这些属性允许传递给GDI函数的参数只包含起始坐标或者尺寸信息,而不必包含Windows在设备上显示对象时需要的所有其它信息。例如,上回我们调用TextOut时,我们只需要在函数中给出设备描述表句柄、起始坐标、文字和文字的长度。而不必指定字体、文字颜色、文字后面的背景色彩以及字符间距,因为这些属性都是设备描述表的一部分。当你想改变这些属性之一时,您调用一个可以改变设备描述表中属性的函数(例如把文字颜色设置成红色),以后针对该设备描述表的TextOut调用
就可以使用改变后的属性了(例如可以输出红色字体)。
我在此列出如下表,方便大家查阅。
属性 |
默认值 |
相关函数 |
背景色 |
WHITE |
GetBkColor |
SetBkColor | ||
背景模式 |
OPAQUE |
GetBkMode |
SetBkMode | ||
位图 |
NONE |
CreateBitMap |
CreateBitMapIndirect | ||
CreateCompatibleBitmap | ||
SelectObject | ||
画刷 |
WHITE_BRUSH |
CreateBrushIndirect |
CreateDIBPatternBrush | ||
CreateHatchBrush | ||
CreatePatternBrush | ||
CreateSolidBrush | ||
SelectObject | ||
画刷起始位置 |
(0,0) |
GetBrushOrg |
SetBrushOrg | ||
UnrealizeObject | ||
剪裁域 |
DISPLAY SURFACE |
ExcludeClipRect |
IntersetClipRect | ||
OffsetClipRgn | ||
SelectClipPath | ||
SelectObject | ||
SelectClipRgn | ||
颜色调色板 |
DEFAULT_PALETTE |
CreatePalette |
RealizePatte | ||
SelectPalette | ||
绘图方式 |
R2_COPYPEN |
GetROP2 |
SetROP2 | ||
字体 |
SYSTEM_FONT |
CreateFont |
CreateFontIndirect | ||
SelectObject | ||
字符间距 |
0 |
GetTextCharacterExtra |
SetTextCharacterExtra | ||
映射方式 |
MM_TEXT |
GetMapMode |
SetMapMode | ||
画笔 |
BLACK_PEN |
CreatePen |
CreatePenIndirect | ||
SelectObject | ||
多边形填充方式 |
ALTERNATE |
GetPolyFillMode |
SetPolyFileMode | ||
缩放模式 |
BLACKONWHITE |
SetStretchBltMode |
GetStretchBltMode | ||
文本颜色 |
BLACK |
GetTextColor |
SetTextColor | ||
视图范围 |
(1,1) |
GetViewportExtEx |
SetViewportExtEx | ||
ScaleViewportExtEx | ||
视图原点 |
(0,0) |
GetViewportOrgEx |
SetViewportOrgEx | ||
窗口范围 |
(1,1) |
GetWindowExtEx |
SetWindowExtEx | ||
ScaleWindowExtEx | ||
窗口原点 |
(0,0) |
GetWindowOrgEx |
OffsetWindowOrgEx | ||
SetWindowOrgEx |
一般以Get开头的函数作用是获取该属性值,一般以Set开头的函数作用是设置该属性值,若有不太清楚的函数,你就自己动手查吧。