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
, 相反,可以从其派生类之一(例如 CPen
或 CBrush
)创建对象。
有关 CGdiObject
的详细信息,请参阅图形对象。
继承层次结构
CGdiObject
要求
标头:afxwin.h
CGdiObject::Attach
将 Windows GDI 对象附加到 CGdiObject
对象。
BOOL Attach(HGDIOBJ hObject);
参数
hObject
Windows GDI 对象(例如 HPEN 或 HBRUSH)的 HANDLE。
返回值
如果附加成功,返回值为非零;否则返回值为 0。
CGdiObject::CGdiObject
构造 CGdiObject
对象。
CGdiObject();
备注
千万不要直接创建 CGdiObject
, 相反,可以从其派生类之一(例如 CPen
或 Cbrush
)创建对象。
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
DeleteTempMap
由 CWinApp
空闲时间处理程序自动调用,可删除由 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 |
不支持 |
如果对象是 CBitmap
,GetObject
仅返回位图的宽度、高度和颜色格式信息。 可以使用 CBitmap::GetBitmapBits 检索实际位。
如果对象是 CPalette
,GetObject
会检索指定调色板中条目数的 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。
注解
虽然 UnrealizeObject
是 CGdiObject
类的成员函数,但它只能在 CBrush
或 CPalette
对象上调用。
对于 CBrush
对象,UnrealizeObject
指示系统在下次将给定画笔选择到设备上下文时重置其原点。 如果对象是 CPalette
,UnrealizeObject
指示系统实现调色板,就好像它以前没有实现过一样。 下次应用程序为指定调色板调用 CDC::RealizePalette 函数时,系统会将逻辑调色板完全重新映射到系统调色板。
UnrealizeObject
函数不应与常用对象配合使用。 每当(通过 CDC::SetBrushOrg 函数)设置新的画笔原点时,都必须调用 UnrealizeObject
函数。 不得为任何显示上下文的当前选定画笔或当前选定调色板调用 UnrealizeObject
函数。