CGdiObject 类

为各种 Windows 图形设备接口 (GDI) 对象(如位图、区域、画笔、笔、调色板和字体)提供基类。

语法

class CGdiObject : public CObject

成员

公共构造函数

名称 描述
CGdiObject::CGdiObject 构造 CGdiObject 对象。

公共方法

名称 描述
CGdiObject::Attach 将 Windows GDI 对象附加到 CGdiObject 对象。
CGdiObject::CreateStockObject 检索 Windows 预定义的常用笔、画笔或字体之一的句柄。
CGdiObject::DeleteObject 通过释放与对象关联的所有系统存储,从内存中删除附加到 CGdiObject 对象的 Windows GDI 对象。
CGdiObject::DeleteTempMap 删除由 FromHandle 创建的任何临时 CGdiObject 对象。
CGdiObject::Detach CGdiObject 对象中拆离 Windows GDI 对象并返回 Windows GDI 对象的句柄。
CGdiObject::FromHandle 在提供了 Windows GDI 对象句柄的情况下,返回指向 CGdiObject 对象的指针。
CGdiObject::GetObject 使用描述附加到 CGdiObject 对象的 Windows GDI 对象的数据填充缓冲区。
CGdiObject::GetObjectType 检索 GDI 对象的类型。
CGdiObject::GetSafeHandle 返回 m_hObject,除非 this 为 NULL,在这种情况下返回 NULL。
CGdiObject::UnrealizeObject 重置画笔的原点或重置逻辑调色板。

公共运算符

“属性” 描述
CGdiObject::operator != 确定两个 GDI 对象在逻辑上是否不相等。
CGdiObject::operator == 确定两个 GDI 对象在逻辑上是否相等。
CGdiObject::operator HGDIOBJ 检索附加的 Windows GDI 对象的 HANDLE。

公共数据成员

“属性” 描述
CGdiObject::m_hObject 包含附加到此对象的 HBITMAP、HPALETTE、HRGN、HBRUSH、HPEN 或 HFONT 的 HANDLE。

备注

千万不要直接创建 CGdiObject, 相反,可以从其派生类之一(例如 CPenCBrush)创建对象。

有关 CGdiObject 的详细信息,请参阅图形对象

继承层次结构

CObject

CGdiObject

要求

标头:afxwin.h

CGdiObject::Attach

将 Windows GDI 对象附加到 CGdiObject 对象。

BOOL Attach(HGDIOBJ hObject);

参数

hObject
Windows GDI 对象(例如 HPEN 或 HBRUSH)的 HANDLE。

返回值

如果附加成功,返回值为非零;否则返回值为 0。

CGdiObject::CGdiObject

构造 CGdiObject 对象。

CGdiObject();

备注

千万不要直接创建 CGdiObject, 相反,可以从其派生类之一(例如 CPenCbrush)创建对象。

CGdiObject::CreateStockObject

检索预定义的常用 Windows GDI 笔、画笔或字体之一的句柄,并将 GDI 对象附加到 CGdiObject 对象。

BOOL CreateStockObject(int nIndex);

参数

nIndex
指定所需常用对象类型的常量。 有关适当值的说明,请参阅 Windows SDK 中 GetStockObject 的 fnObject 参数

返回值

如果该函数成功,则为非 0;否则为 0。

备注

使用对应于 Windows GDI 对象类型的派生类之一(例如用于常用笔的 CPen)调用此函数。

CGdiObject::DeleteObject

通过释放与 Windows GDI 对象关联的所有系统存储,从内存中删除附加的 Windows GDI 对象。

BOOL DeleteObject();

返回值

如果已成功删除 GDI 对象,则为非零值;否则为 0。

注解

CGdiObject 对象关联的存储不受此调用的影响。 应用程序不应对当前选择到设备上下文中的 CGdiObject 对象调用 DeleteObject

删除图案画笔时,不会删除与画笔关联的位图。 必须单独删除位图。

CGdiObject::DeleteTempMap

DeleteTempMapCWinApp 空闲时间处理程序自动调用,可删除由 FromHandle 创建的任何临时 CGdiObject 对象。

static void PASCAL DeleteTempMap();

备注

在删除 CGdiObject 对象之前,DeleteTempMap 会拆离附加到临时 CGdiObject 对象的 Windows GDI 对象。

示例

// DeleteTempMap() is a static member and so does not need to
// be called within the scope of an instantiated CGdiObject object.
CGdiObject::DeleteTempMap();

CGdiObject::Detach

CGdiObject 对象中拆离 Windows GDI 对象并返回 Windows GDI 对象的句柄。

HGDIOBJ Detach();

返回值

拆离的 Windows GDI 对象的 HANDLE;如果没有附加 GDI 对象,则为 NULL。

CGdiObject::FromHandle

在提供了 Windows GDI 对象句柄的情况下,返回指向 CGdiObject 对象的指针。

static CGdiObject* PASCAL FromHandle(HGDIOBJ hObject);

参数

hObject
Windows GDI 对象的 HANDLE。

返回值

指向 CGdiObject 的指针,该指针可以是临时的,也可以是永久的。

注解

如果 CGdiObject 对象尚未附加到 Windows GDI 对象,就会创建并附加一个临时 CGdiObject 对象。

此临时 CGdiObject 对象仅在应用程序下次在其事件循环中有空闲时间之前有效,到时将删除所有临时图形对象。 另一种说法是,临时对象仅在处理一个窗口消息期间有效。

CGdiObject::GetObject

使用定义指定对象的数据填充缓冲区。

int GetObject(
    int nCount,
    LPVOID lpObject) const;

参数

nCount
指定要复制到 lpObject 缓冲区的字节数

lpObject
指向用于接收信息的用户提供的缓冲区。

返回值

检索到的字节数;如果发生错误,则为 0。

备注

函数检索的数据结构的类型取决于图形对象的类型,如以下列表所示:

对象 缓冲区类型
CPen LOGPEN
CBrush LOGBRUSH
CFont LOGFONT
CBitmap BITMAP
CPalette WORD
CRgn 不支持

如果对象是 CBitmapGetObject 仅返回位图的宽度、高度和颜色格式信息。 可以使用 CBitmap::GetBitmapBits 检索实际位。

如果对象是 CPaletteGetObject 会检索指定调色板中条目数的 WORD。 函数不检索定义调色板的 LOGPALETTE 结构。 应用程序可以通过调用 CPalette::GetPaletteEntries 获取有关调色板条目的信息。

CGdiObject::GetObjectType

检索 GDI 对象的类型。

UINT GetObjectType() const;

返回值

如果成功,则为对象的类型;否则为 0。 值可以是下列任一值:

  • OBJ_BITMAP 位图

  • OBJ_BRUSH 画笔

  • OBJ_FONT 字体

  • OBJ_PAL 调色板

  • OBJ_PEN 笔

  • OBJ_EXTPEN 扩展笔

  • OBJ_REGION 区域

  • OBJ_DC 设备上下文

  • OBJ_MEMDC 内存设备上下文

  • OBJ_METAFILE 元文件

  • OBJ_METADC 元文件设备上下文

  • OBJ_ENHMETAFILE 增强型元文件

  • OBJ_ENHMETADC 增强型元文件设备上下文

CGdiObject::GetSafeHandle

返回 m_hObject,除非 this 为 NULL,在这种情况下返回 NULL。

HGDIOBJ GetSafeHandle() const;

返回值

附加的 Windows GDI 对象的 HANDLE;如果没有附加对象,则为 NULL。

备注

这是常规句柄接口范例的一部分,在 NULL 是句柄的有效值或特殊值时很有用。

示例

请参阅 CWnd::IsWindowEnabled 的示例。

CGdiObject::m_hObject

包含附加到此对象的 HBITMAP、HRGN、HBRUSH、HPEN、HPALETTE 或 HFONT 的 HANDLE。

HGDIOBJ m_hObject;

CGdiObject::operator !=

确定两个 GDI 对象在逻辑上是否不相等。

BOOL operator!=(const CGdiObject& obj) const;

参数

obj
指向现有 CGdiObject 的指针。

备注

确定左侧的 GDI 对象是否不等于右侧的 GDI 对象。

CGdiObject::operator ==

确定两个 GDI 对象在逻辑上是否相等。

BOOL operator==(const CGdiObject& obj) const;

参数

obj
对现有 CGdiObject 的引用。

注解

确定左侧的 GDI 对象是否等于右侧的 GDI 对象。

CGdiObject::operator HGDIOBJ

检索附加的 Windows GDI 对象的 HANDLE;如果没有附加对象,则为 NULL。

operator HGDIOBJ() const;

CGdiObject::UnrealizeObject

重置画笔的原点或重置逻辑调色板。

BOOL UnrealizeObject();

返回值

如果成功,则不为 0;否则为 0。

注解

虽然 UnrealizeObjectCGdiObject 类的成员函数,但它只能在 CBrushCPalette 对象上调用。

对于 CBrush 对象,UnrealizeObject 指示系统在下次将给定画笔选择到设备上下文时重置其原点。 如果对象是 CPaletteUnrealizeObject 指示系统实现调色板,就好像它以前没有实现过一样。 下次应用程序为指定调色板调用 CDC::RealizePalette 函数时,系统会将逻辑调色板完全重新映射到系统调色板。

UnrealizeObject 函数不应与常用对象配合使用。 每当(通过 CDC::SetBrushOrg 函数)设置新的画笔原点时,都必须调用 UnrealizeObject 函数。 不得为任何显示上下文的当前选定画笔或当前选定调色板调用 UnrealizeObject 函数。

另请参阅

层次结构图
CBitmap 类
CBrush 类
CFont 类
CPalette 类
CPen 类
CRgn 类