CPen
CPen 类 封 装 了 Windows 图 形 设 备 接 口 ( GD I ) 画 笔 。
#include <afxwin.h>
请 参 阅 CBrush
Construction
Cpen 构 造 一 个 CPen 对象
Initialization
CreatePen 用 指 定 风 格 、 宽 度 和 画 刷 属 性 创 建 一 个 逻 辑 装 饰画 笔 或 几 何 画 笔 , 并 将 它 连 接 到 CPen 对 象 上
CreatePenIndirect 用 在 一 个 LOGPEN 结 构 中 给 出 的 风 格 、 宽 度 和 颜
色 来 创 建 一 只 画 笔 , 并 将 它 连 接 到 CPen 对 象 上
Operations
FromHandle 当 给 予 一 个 W indows HPEN 时 ,返 回 一 个 指 向 CPen
对 象 的 指 针
Attributes
Operator HPEN 返 回 连 接 到 CPen 对 象 上 的 W indows 句 柄
Attributes
GetLogPen 获 取 一 个 LOGPEN 基 础 结 构
GetExtLogPen 获 取 一 个 EXTLOGPEN 基 础 结 构
CPen::CPen
CPen();
CPen( int nPenStyle , int nWidth , COLORREF crColor ); throw( CResourceException );
CPen( int nPenStyle , int nWidth , const LOGBRUSH* pLogBrush , int nStyleCount = 0,
const DWORD* lpStyle = NULL ); throw( CResourceException );
参 数
nPenStyle
指 定 画 笔 的 风 格 。 在 构 造 函 数 的 第 一 个 版 本 中 , 此 参 数 可 以 取 下 列 值 之一 :
|
创 建 一 支 实 线 画 笔 。 |
||
---|---|---|---|
|
创 建 一 支 虚 线 画 笔 。 只 有 当 画 笔 宽 度 为 |
1 |
或 更 小 ( 以 设 备 |
单 位 计 算 ) 时 才 有 效 。
-
PS_DOT 创 建 一 支 点 线 画 笔 。 只 有 当 画 笔 宽 度 为 1 或 更
小 ( 以 设备 单 位 计 算 ) 时 才 有 效 。
-
PS_DASHDOT 创 建 一 支 虚 线 和 点 交 替 的 画 笔 。 只 有 当 画 笔
宽 度 为 1
或 更 小 ( 以 设 备 单 位 计 算 ) 时 才 有 效 。
-
PS_DASHDOTDOT 创 建 一 支 虚 线 和 两 点 交 替 的 画 笔 。 只 有 当
画 笔 宽度为 1 或 更 小 ( 以 设 备 单 位 计 算 ) 时 才 有 效 。
-
PS_NULL 创 建 一 支 空 画 笔 。
-
PS_INSIDEFRAME 创 建 一 支 画 笔 , 该 画 笔 在 W indows GDI 输 出
函数 所 产 生 的 封 闭 形 状 的 框 架 内 画 线 , 此 输 出 函 数 指 定 一 个 限 定 矩 形( 例
如, Ellipse , Rectangle , RoundRec t, Pie 和 Chord 成 员 函 数 ) , 当 此风 格 用 于 没 有 指 定 限 定 矩 形 的 W indows GDI 输 出 函 数 ( 例 如 LineTo 成 员 函 数 ) 时 , 此 画 笔 的 绘 制 区 域 不 受 框 架 的 限 制 。
第 二 种 版 本 的 CP en 构 造 器 指 明 了 类 型 、 风 格 、 尾 帽 和 连 接 等 属 性 组 合 。来 自 每 个 类 别 的 值 应 使 用 位 操 作 符 ( 1 ) 组 合 起 来 , 笔 的 风 格 可 以 是 下 列之 一 :
-
PS_GEOMETRIC 创 建 一 支 几 何 画 笔 。
-
PS_COSMETIC 创 建 一 支 装 饰 画 笔 。
CPen 构 造 函 数 的 第 二 个 版 本 为 nPe n Style 添 加 了 下 列 一 些 画 笔 风 格 :
-
PS_ALTERNATE 创 建 一 支 交 替 设 置 像 素 的 画 笔 ( 此 风 格 只
用 于 装 饰画 笔 ) 。
-
PS_USERSTYLE 创 建 一 支 使 用 用 户 提 供 的 风 格 数 组 的 画 笔
。
尾 帽 可 以 是 下 列 值 之 一 :
-
PS_ENDCAP_ROUND 尾 帽 是 圆 的 。
-
PS_ENDCAP_SQUARE 尾 帽 是 方 的 。
-
PS_ENDCAP_FLAT 尾 帽 是 平 面 的 。连 接 可 以 是 下 列 值 之 一
:
-
PS_JOIN _BEVEL 连 接 是 斜 截 式 的 。
-
PS_JOIN_MITER 当 连 接 在 ::SetMiterLimit 函 数 所 设 置 的 当 前
限 制 之内 时 , 连 接 是 斜 接 式 的 。 如 果 连 接 超 出 这 个 限 制 则 成 为 斜 截 式 的 。
-
PS_JOIN_ROUND 连 接 是 圆 的 。
nWidth
指 定 画 笔 的 宽 度 。
- 对 于 构 造 函 数 的 第 一 个 版 本 来 说 , 如 果 这 个 值 是 0 ,
则 不 管 是 什 么 映
射 方 式 , 以 设 备 单 位 计 算 的 宽 度 总 是 一 个 像 素 。
- 对 于 构 造 函 数 的 第 二 个 版 本 来 说 , 如 果 nPenStyle 是
PS_GEOMETRIC , 则 宽 度 以 逻 辑 单 位 给 出 。 如 果 nPenStyle 是 PS_COSMETIC , 则 宽 度 必须 设 置 为 1 。
crColor
包 含 了 画 笔 的 RGB 值 。
pLogBrush
指 向 一 个 LOGBRUSH 结 构 。 如 果 nPenStyle 是 PS_COSMETIC , 则 此LOGBRUSH 结 构 的 lbColor 成 员 指 定 画 笔 的 颜 色 , 此 LOGBRUSH 结构的 lbStyle 成 员 必 须 设 置 为 BS_SOLID 。 如 果 nPenStyle 为
PS_GEOMETRIC , 则 此 结 构 的 所 有 成 员 都 必 须 用 于 指 定 画 笔 画 刷 属 性 。
nStyleCount
指 定 lpStyle 数 组 的 长 度 ( 以 双 字 为 单 位 ) 。 如 果 nPenStyle 不 是
PS_USERSTYLE , 这 个 值 必 须 是 零 。
lpStyle
指 向 一 个 双 字 值 的 数 组 。 第 一 个 值 指 定 一 个 用 户 定 义 的 风 格 中 第 一 段 虚
线 的 长 度 , 第 二 个 值 指 定 第 一 段 空 白 的 长 度 , 如 此 等 等 。 如 果 nPenStyle
不 是 PS_USERSTYLE , 则 这 个 指 针 必 须 为 NULL 。
说 明
如 果 你 使 用 的 是 没 有 参 数 的 构 造 函 数 , 你 就 必 须 用 CreatePen, CreatePenIndirect 或 CreateStockObject 成 员 函 数 来 初 始 化 所 生 成 的 CPen 对 象 。 如 果 你 使 用 的 是带 参 数 的 构 造 函 数 , 则 不 再 需 要 进 一 步 的 初 始 化 。 如 果 有 错 误 发 生 , 则 带 参 数的 构 造 函 数 可 能 会 抛 出 一 个 异 常 , 但 是 不 带 参 数 的 构 造 函 数 则 总 是 会 成 功 。
请 参 阅 CPen::CreatePen , CPen::CreatePenIndirect ,
CGdiObject::CreateStockObject
CPen::CreatePen
BOOL CreatePen( int nPenStyle , int nWidth , COLORREF cfColor ); BOOL CreatePen( int nPenStyle , intz , const LOGBRUSH* pLogBrush ,
int nStyleCount = 0, const DWORD* lpStyle = NULL );
返 回 值
如 果 成 功 则 返 回 非 零 值 或 逻 辑 画 笔 的 句 柄 ; 否 则 返 回 0 。
参 数
nPenStyle
指 定 画 笔 的 风 格 。其 可 能 取 值 的 列 表 ,请 参 见 CPen 构 造 函 数 中 的 nPenStyle
参 数 。
nWidth
指 定 画 笔 的 宽 度 。
-
对于 CreatePen 的 第 一 个 版 本 来 说 , 如 果 这 个 值 为 0 , 则
不 管 是 什 么 映射 模 式 , 以 设 备 单 位 表 示 的 宽 度 总 是 一 个 像 素 。
-
对于 CreatePen 的 第 二 个 版 本 , 如 果 nPenStyle 是 PS_GEOMETRIC
, 则 宽 度 以 逻 辑 单 位 给 出 。 如 果 nPenStyle 是 PS_COSMETIC , 则 宽 度 必须 设 置 为 1 。
crColor
包 含 画 笔 的 一 个 RGB 颜 色 。
pLogBrush
指 向 一 个 LOGBRUSH 结 构 。 如 果 nPenStyle 是 PS_COSMETIC , 则 此LOGBRUSH 结 构 的 lbColor 成 员 指 定 画 笔 的 颜 色 , 此 LOGBRUSH 结构的 lbStyle 成 员 必 须 设 置 为 BS_SOLED 。 如 果 nPenStyle 为PS_GEOMET R IC , 则 此 结 构 的 所 有 成 员 都 必 须 用 于 指 定 画 笔 画 刷 属 性 。
nStyleCount
指 定 lpStyle 数 组 的 长 度 ( 以 双 字 为 单 位 ) 。 如 果 nPenStyle 不 是
PS_USERSTYLE , 这 个 值 必 须 是 零 。
lpStyle
指 向 一 个 双 字 值 的 数 组 。 第 一 个 值 指 定 一 个 用 户 定 义 的 风 格 中 第 一 段 虚
线 的 长 度 , 第 二 个 值 指 定 第 一 段 空 白 的 长 度 , 如 此 等 等 。 如 果 nPenStyle
不 是 PS_USERSTYLE , 则 这 个 指 针 必 须 为 NULL 。
说 明
CreatePen 的 第 一 个 版 本 用 指 定 的 风 格 、 宽 度 和 颜 色 来 初 始 化 一 支 画 笔 。 此 画 笔以 后 可 选 作 为 任 何 设 备 环 境 的 当 前 画 笔 。
宽 度 大 于 1 个 像 素 的 画 笔 总 是 具 有 PS_NULL ,PS_SOLED 或 PS_INSIDEFRAME
风 格 。
如 果 画 笔 具 有 PS_INSIDEFRAME 风 格 和 某 一 不 匹 配 逻 辑 调 色 板 中 颜 色 的 颜色 , 则 此 画 笔 用 一 个 混 合 色 来 进 行 绘 制 。 PS_SOLID 画 笔 风 格 不 能 用 一 个 混 合色 来 创 建 一 支 画 笔 。 当 画 笔 的 宽 度 小 于 或 等 于 1 时 , PS_INSIDEFRAME 风 格等 同 于 PS_SOLID 风 格 。
CreatePen 的 第 二 个 版 本 初 始 化 一 支 具 有 指 定 的 风 格 、 宽 度 和 刷 子 属 性 的 逻 辑 装饰 画 笔 或 几 何 画 笔 。 一 支 装 饰 画 笔 的 宽 度 总 是 1 ; 几 何 画 笔 的 宽 度 总 是 由 世 界单 位 指 定 。 当 应 用 程 序 创 建 了 一 支 逻 辑 画 笔 之 后 , 它 可 通 过 调 用CDC ::SelectObject 函 数 来 将 此 画 笔 选 入 一 个 设 备 环 境 中 。 当 一 支 画 笔 被 选 入 一个 设 备 环 境 之 后 , 它 就 可 以 用 于 画 直 线 或 曲 线 。
-
如 果 nPenStyle 为 PS_COSMETIC 和 PS_USERSTYLE , 则 lpStyle
数 组 中 的项 指 定 风 格 单 位 中 虚 线 和 空 白 的 长 度 。 一 个 风 格 单 位 由 使 用 此 画 笔 画 线 的设 备 定 义 。
-
如 果 nPenStyle 为 PS_GEOMETRIC 和 PS_USERSTYLE , 则 lpStyle
数 组 中的 项 指 定 虚 线 和 空 白 的 长 度 ( 用 逻 辑 单 位 表 示 ) 。
-
如 果 nPenStyle 为 PS_ALTERNATE , 则 忽 略 风 格 单 位 而 交 替
设 置 像 素 。
当 一 个 应 用 程 序 不 再 需 要 一 支 给 定 的 画 笔 时 ,它 将 调 用 CGdiObject::DeleteObject 成 员 函 数 或 销 毁 CPen 对 象 , 以 使 资 源 不 再 使 用 。 当 一 支 画 笔 被 选 入 一 个 设 备环 境 后 , 应 用 程 序 就 不 能 删 除 这 支 画 笔 了 。
请 参 阅 CPen::CreatePenIndirec t, CPen::CPen , CGdiObject::DeleteObjec t, LOGBRUSH
CPen::CreatePenIndirect
BOOL CreatePenIndirect( LPLOGPEN lpLogPen );
返 回 值
如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
lpLogPen
指向 Windows LOGPEN 结 构 , 此 结 构 包 含 了 此 画 笔 的 信 息 。
说 明
此 函 数 初 始 化 一 支 画 笔 , 此 画 笔 具 有 lp L ogPen 所 指 向 的 结 构 中 给 定 的 风 格 、 宽度 和 颜 色 。
宽 度 大 于 1 个 像 素 的 画 笔 总 是 具 有 PS_NULL ,PS_SOLID 或 PS_INSIDEFRAME
风 格 。
如 果 画 笔 具 有 PS_INSIDEFRAME 风 格 和 某 种 不 匹 配 逻 辑 调 色 板 中 颜 色 的 颜色 , 则 画 笔 用 一 支 混 合 色 来 绘 制 。 如 果 画 笔 宽 度 小 于 或 等 于 1 , 则PS_INSIDEFRAME 风 格 等 同 于 PS_SOLID 风 格 。
请 参 阅 CPen::CreatePen , CPen::CPen
CPen::FormHandle
static CPen* PASCAL FromHandle( HPEN hPen );
返 回 值
如 果 成 功 则 返 回 一 个 指 向 CPen 对 象 的 指 针 ; 否 则 返 回 NULL 。
参 数
hPen
Windows GDI 画 笔 的 HPEN 句 柄 。
说 明
当 给 予 一 个 W indows GDI 画 笔 对 象 时 , 此 函 数 返 回 指 向 一 个 CPen 对 象 的 指 针 。如 果 此 句 柄 没 有 连 接 一 个 CPen 对 象 ,则 将 创 建 一 个 临 时 CPen 对 象 ,并 将 此 CPen 对 象 连 接 到 此 HPEN 句 柄 上 。 这 个 临 时 CPen 对 象 只 能 有 效 到 下 次 应 用 程 序 的事 件 循 环 有 空 闲 时 间 时 , 到 那 时 所 有 临 时 图 形 对 象 都 将 被 删 除 。 也 就 是 说 , 临时 对 象 仅 在 处 理 一 条 Windows 消 息 的 期 间 有 效 。
CPen::GetExtLogPen
int GetExtLogPen( EXTLOGPEN* pLogPen );
返 回 值
如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
pLogPen
指 向 一 个 EXTLOGPEN 结 构 , 此 结 构 包 含 此 画 笔 的 消 息 。
说 明
此 函 数 用 来 获 取 一 个 EXTLOGPEN 基 础 结 构 。 该 EXTLOGPEN 结 构 定 义 了 画笔 的 风 格 、 宽 度 和 刷 子 属 性 。 例 如 , 调 用 GetExtLogPen 来 匹 配 一 支 画 笔 的 特别 的 风 格 。
参 见“ W in32 SDK 程 序 员 参 考 ” 中 的 下 列 主 题 , 可 以 获 取 有 关 画 笔 属 性 的 信 息 :
-
GetObject
-
EXTLOGPEN
-
LOGPEN
-
ExtCreatePen
示 例
下 面 的 例 子 代 码 演 示 了 调 用 GetExtLogPen 来 获 取 一 支 画 笔 的 属 性 , 然 后 创 建一 支 新 的 、 具 有 相 同 颜 色 的 装 饰 画 笔 。
EXTLOGPEN extlogpen; penExisting.GetExtLogPen( &extlogpen ); CPen penOther;
LOGBRUSH LogBrush = { extlogpen.elpBrushStyle,extlogpen.elpColor, extlogpen.elpHatch } ;
penOther.CreatePen( PS_COSMETIC, 1, &LogBrush );
请 参 阅 CPen::GetLogPen , CPen::CreatePen
CPen::GetLogPen
int GetLogPen( LOGPEN* pLogPen );
返 回 值
如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
pLogPen
指 向 一 个 包 含 画 笔 信 息 的 LOGPEN 结 构 。
说 明
此 函 数 用 来 获 取 一 个 LOGPEN 基 础 结 构 。 该 LOGPEN 结 构 定 义 了 画 笔 的 风 格 、宽 度 和 画 笔 模 式 。
例 如 , 调 用 GetLogPen 来 匹 配 一 支 画 笔 的 特 别 风 格 。
参 见“ W in32 SDK 程 序 员 参 考 ” 中 的 下 列 主 题 , 可 以 获 取 有 关 画 笔 属 性 的 信 息 :
-
GetObject
-
LOGPEN
示 例
下 面 的 例 子 代 码 演 示 了 调 用 GetLogPen 来 获 取 一 支 画 笔 的 特 征 , 然 后 创 建 一 支新 的 、 具 有 相 同 颜 色 的 装 饰 画 笔 。
LOGPEN logpen; penExisting.GetLogPen( &logpen );
CPen penOther( PS_SOLID, 0, lo g pen.l o pnColor );
请 参 阅 CPen::GetExtLogPen
CPen::operator HPEN operator HPEN() const; 返 回 值
如 果 成 功 , 则 返 回 一 个 CPen 对 象 所 代 表 的 W indows GDI 对 象 句 柄 ; 否 则 返 回
0 。
说 明
此 操 作 符 用 来 获 取 连 接 到 CPen 对 象 上 的 Windows GDI 句 柄 。 此 操 作 符 是 一 个强 制 转 换 操 作 符 , 它 支 持 直 接 使 用 一 个 HPEN 对 象 。
要 获 取 更 多 有 关 使 用 图 形 对 象 的 信 息 , 请 参 见 “ Win32 SDK 程 序 员 参 考 ” 中 的文 章 “ 图 形 对 象 ” 。