对图形对象的操作

应用程序创建显示器或打印机 DC 后,它可以开始在关联的设备上绘图,或者,对于内存 DC,它可以开始在内存中存储的位图上绘制。 但是,在绘图开始之前,有时在绘图过程中,通常需要将默认对象替换为新对象。

应用程序可以通过调用 GetCurrentObjectGetObject 函数来检查默认对象的属性。 GetCurrentObject 函数返回标识当前笔、画笔、调色板、位图或字体的句柄,GetObject 函数初始化包含该对象的属性的结构。

某些打印机提供常驻笔、画笔和字体,可用于提高应用程序中的绘制速度。 可以使用两个函数来枚举这些对象: EnumObjectsEnumFontFamilies。 如果应用程序必须枚举常驻笔或画笔,它可以调用 EnumObjects 函数来检查相应的属性。 如果应用程序必须枚举常驻字体,它可以调用 EnumFontFamilies 函数 (该函数也可以枚举) GDI 字体。

一旦应用程序确定需要替换默认对象,它就会通过调用以下创建函数之一来创建新对象。

Graphic 对象 函数
Bitmap CreateBitmapCreateBitmapIndirectCreateCompatibleBitmapCreateDiscardableBitmapCreateDIBitmap
Brush CreateBrushIndirectCreateDIBPatternBrushCreateDIBPatternBrushPtCreateHatchBrushCreatePatternBrushCreateSolidBrush
调色板 CreatePalette
字体 CreateFontCreateFontIndirect
CreatePenCreatePenIndirectExtCreatePen
区域 CreateEllipticRgnCreateEllipticRgnIndirectCreatePolygonRgnCreatePolyPolygonRgnCreateRectRgnCreateRectRgnIndirectCreateRoundRectRgn

 

其中每个函数都返回一个标识新对象的句柄。 应用程序检索句柄后,必须调用 SelectObject 函数来替换默认对象。 但是,应用程序应保存标识默认对象的句柄,并在不再需要新对象时使用此句柄替换新对象。 当应用程序使用新对象完成绘制时,它必须通过调用 SelectObject 函数来还原默认对象,然后通过调用 DeleteObject 函数来删除新对象。 未能删除对象会导致严重的性能问题。