C S tatusBar
一 个 CStatusBar 对 象 是 一 个 带 有 一 行 文 本 输 出 窗 格 的 控 件 ,或 者 称 为“ 指 示 器 ”。这 些 输 出 窗 格 常 被 用 作 消 息 行 和 状 态 指 示 器 。 例 如 : 简 单 解 释 所 选 菜 单 命 令 的菜 单 帮 助 消 息 行 , 作 为 显 示 SCROLL LOCK , NUMLOCK 以 及 其 它 键 状 态 的 指示 器 。
在 MFC4.0 之 后 新 增 加 的 成 员 函 数 CStatusBar:: GetStatusBarCtrl, 允 许 你 利 用W indows 通 用 控 件 对 状 态 条 的 定 制 和 其 它 功 能 的 支 持 。 CStatusBar 成 员 函 数 提供 了 W indows 通 用 控 件 的 大 多 数 功 能 ; 但 是 , 当 你 调 用 GetStatusBarCtrl 时 , 你 可 以 赋 予 你 的 状 态 条 更 多 的 Windows95 状 态 条 的 特 性 。 当 你 调 用GetStatusBarCtrl 时 , 它 将 返 回 一 个 对 CStatusBarCtrl 对 象 的 引 用 。 参 见CStatusBarCtrl 可 以 获 得 有 关 使 用 W indows 通 用 控 件 设 计 工 具 条 的 更 多 信 息 。有 关 通 用 控 件 的 更 多 的 一 般 信 息 , 请 参 见 “ W indows 95 SDK 程 序 员 参 考 ” 中的 “ 通 用 控 件 ” 。
框 架 将 指 示 器 的 信 息 保 存 在 一 个 数 组 中 , 且 最 左 边 的 的 指 示 器 位 于 0 位 置 上 。当 创 建 一 个 工 具 条 时 , 可 以 使 用 一 个 字 符 串 ID 数 组 , 框 架 把 这 一 组 ID 与 对 应的 指 示 器 关 联 起 来 。 此 后 , 你 就 可 以 使 用 字 符 串 ID 或 索 引 值 访 问 一 个 指 示 器 。
缺 省 的 , 第 一 个 指 示 器 是 “ 可 伸 缩 的 ” : 该 指 示 器 占 据 了 其 它 指 示 器 窗 格 未 用到 的 状 态 条 长 度 , 因 此 其 它 窗 格 是 右 对 齐 的 。
可 以 按 下 列 步 骤 创 建 一 个 状 态 条 :
-
构造 CStatusBar 对 象 。
-
调用 Creat e( 或 CreateEx) 函 数 来 创 建 状 态 条 窗 口 并 将 它
连 接 到 CStatusBar
对 象 。
- 调用 SetIndicators 函 数 将 字 符 串 ID 与 每 一 个 指 示 器 联 系
起 来 。有 三 种 办 法 可 以 更 新 状 态 条 窗 口 中 的 文 本 :
-
调用 CWnd ::SetWindowText 只 更 新 窗 格 0 中 的 文 本 。
-
在 状 态 条 的 ON_UPDATE_COMMAND_UI 处 理 程 序 中 调 用
CCmdUI::SetText 函 数 。
- 调用 SetPaneText 函 数 更 新 任 何 窗 格 中 的 文 本 。调 用 SetPane
Style 可 以 更 新 一 个 状 态 条 窗 格 的 风 格 。
有 关 使 用 CStatusBar 的 更 多 信 息 , 参 见 “ Visual C++ 程 序 指 南 ” 中 的 文 章 “ 状态 条 ” , 以 及 技 术 注 释 31 , “ 控 制 条 ” 。
#include <afxext.h>
请 参 阅 CStatusBarCtrl, CControlBar, CWnd::SetWindowText, CStatusBar::SetIndicators
C StatusBar 类 成 员
Construction
CstatusBar 构 造 一 个 CStatusBar 对 象
Create 创 建 状 态 条 , 并 将 它 与 CstatusBar 对 象 连 接 , 且 设置 初 始 字 体 和 条 高 度
CreateEx 创 建 一 个 具 有 嵌 入 CStatusBarCtrl 对 象 附 加 风 格 的
CStatusBar 对 象
SetIndicators 设 置 指 示 器 ID
Attributes
CommandToIndex 获 取 给 定 指 示 器 ID 的 索 引
GetItemID 获 取 给 定 索 引 的 指 示 器 ID
GetItemRect 获 取 给 定 索 引 值 的 显 示 矩 形
GetPaneInfo 获 取 一 个 给 定 索 引 的 指 示 器 ID , 风 格 和 宽 度
GetPaneStyle 获 取 一 个 给 定 索 引 的 指 示 器 风 格
GetPaneText 获 取 一 个 给 定 索 引 的 指 示 器 文 本GetStatusBarCtrl 允 许 直 接 访 问 基 础 通 用 控 件SetPaneStyle 设 置 一 个 给 定 索 引 的 指 示 器 风 格
SetPaneText 设 置 一 个 给 定 索 引 的 指 示 器 文 本
SetPaneInfo 设 置 一 个 给 定 索 引 的 指 示 器 ID , 风 格 和 宽 度
续 表
Overridable s D rawItem 当 一 个 属 主 绘 制 的 状 态 条 控 件 的 外 观 改 变 时 , 此 函
数 被 调 用
成 员 函 数
CStatusBar::CommandToIndex
int CommandToIndex( UINT nIDFind ) const;
返 回 值
如 果 成 功 则 返 回 指 示 器 的 索 引 ; 否 则 返 回 -1 。
nIDFind
要 获 取 其 索 引 的 指 示 器 的 字 符 串 ID 。
说 明
此 成 员 函 数 用 来 获 取 一 个 给 定 ID 的 指 示 器 索 引 值 。 第 一 个 指 示 器 的 索 引 值 为
0 。
请 参 阅 CStatusBar::GetItemID
CStatusBar::Create
BOOL Create( CWnd* pParentWnd , DWORD dwStyle = WS_CHILD | WS_VISIBLE |
CBRS_BOTTOM, U INT nID = AFX_IDW_STATUS_BAR );
如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
pParentWnd
指 向 一 个 CWnd 对 象 的 指 针 , 该 对 象 的 W indows 窗 口 是 此 状 态 条 的 父 窗
口 。
dwStyle
状 态 条 风 格 。 除 标 准 的 W indows 风 格 之 外 , 还 支 持 下 列 风 格 :
-
CBRS_TOP 控 制 条 在 框 架 窗 口 的 顶 部 。
-
CBRS_BOTTOM 控 制 条 在 框 架 窗 口 的 底 部 。
-
CBRS_NOALIGN 当 父 窗 口 的 尺 寸 发 生 变 化 时 不 重 新 定 位 控
制 条 。
nID
工 具 条 的 子 窗 口 ID 。
说 明
此 成 员 函 数 用 来 创 建 一 个 状 态 条( 一 个 子 窗 口 ) 并 将 它 与 CStatusBar 对 象 连 接 。还 将 状 态 条 的 初 始 字 体 和 高 度 设 置 为 缺 省 值 。
请 参 阅 CStatusBar::SetIndicators
CStatusBar::CreateEx
BOOL CreateEx( CWnd* pParentWnd , D W O R D dwCtrlStyle = 0, DWORD dwStyle = WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, UINT nID = AFX_IDW_STATUS_BAR );
返 回 值
如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
pParentWnd
指向 CWnd 对 象 的 指 针 , 该 对 象 的 W indows 窗 口 是 状 态 条 的 父 窗 口 。
dwCtrlStyle
用 于 嵌 入 CStatusBarCtrl 对 象 创 建 的 附 加 风 格 。 有 关 所 支 持 的 风 格 的 完 整列 表 , 参 见 dwStyle 。
被 支 持 的 状 态 条 风 格 有 :
- SBARS_SIZEGRIP 在 状 态 条 的 右 端 有 一 个 调 整 大 小 的 把 手
的 状 态 条 控件 。 一 个 调 整 大 小 的 把 手 就 类 似 于 一 个 调 整 大 小 的 边 ; 它 是 一 个 特 别 的 区
域 , 用 户 可 以 点 击 并 拖 动 它 来 调 整 父 窗 口 的 大 小 。
- SBT_TOOLTIPS 状 态 条 支 持 工 具 提 示 。
dwStyle
状 态 条 风 格 。 所 支 持 的 风 格 包 括 :
-
SBARS_SIZEGRIP 在 状 态 条 的 右 端 有 一 个 调 整 大 小 的 把 手
的 状 态 条控 件 。 一 个 调 整 大 小 的 把 手 就 类 似 于 一 个 调 整 大 小 的 边 ; 它 是 一 个 特别 的 区 域 , 用 户 可 以 点 击 并 拖 动 它 来 调 整 父 窗 口 的 大 小 。
-
SBT_TOOLTIPS 状 态 条 支 持 工 具 提 示 。
nID
状 态 条 的 子 窗 口 ID 。
说 明
此 成 员 函 数 用 来 创 建 一 个 状 态 条 ( 一 个 子 窗 口 ) , 并 将 它 与 CStatusBar 对 象 连
接 。 此 函 数 也 将 状 态 条 的 初 始 字 体 和 高 度 设 置 为 缺 省 值 。
在 创 建 需 要 具 有 一 定 风 格 的 嵌 入 状 态 条 控 件 时 , 使 用 CreateEx 来 代 替 Creat 。例 如 , 设 置 dwCtrlStyle 为 SBT_TOOLTIPS 来 在 状 态 条 对 象 中 显 示 工 具 提 示 。
CStatusBar::CStatusBar
CStatusBar();
说 明
此 成 员 函 数 用 来 构 造 一 个 CStatusBar 对 象 , 如 果 必 要 的 话 , 创 建 一 种 缺 省 的 状态 条 字 体 , 并 将 字 体 特 征 设 置 为 缺 省 值 。
请 参 阅 CStatusBar::Create
CStatusBar::DrawItem
virtual void DrawItem( LPDRA W ITEMSTRUCT lpDrawItemStruct );
参 数
lpDrawItemStruct
一 个 指 向 DRAWITEMSTRUCT 结 构 的 指 针 , 该 结 构 包 含 了 有 关 所 需 要的 绘 画 类 型 的 信 息 。
说 明
当 一 个 属 主 绘 制 的 状 态 条 的 外 观 改 变 时 , 框 架 调 用 此 成 员 函 数 。
D R A W ITEMSTRUCT 结 构 的 itemAction 成 员 定 义 了 要 执 行 的 绘 画 动 作 。 重 载这 个 成 员 函 数 可 以 实 现 一 个 属 主 绘 制 的 CStatusBar 对 象 的 绘 画 。 在 此 成 员 函 数终 止 之 前 , 应 用 程 序 应 该 恢 复 在 lpDrawItemStruct 中 提 供 的 显 示 环 境 所 选 择 的
所 有 图 形 设 备 接 口 ( GD I) 。
请 参 阅 CWnd::OnDrawItem
CStatusBar::GetItemID
UINT GetItemID( int nIndex ) const;
返 回 值
返 回 由 nIndex 指 定 的 指 示 器 的 ID 。
参 数
nIndex
要 获 取 其 ID 的 指 示 器 的 索 引 。
此 成 员 函 数 返 回 由 nIndex 指 定 的 指 示 器 的 ID 。
请 参 阅 CStatusBar::CommandToIndex
CStatusBar::GetItemRect
void GetItemRect( int nIndex , LPRECT lpRect ) const;
参 数
nIndex
要 获 取 其 矩 形 坐 标 的 指 示 器 的 索 引 。
lpRect
执 行 一 个 RECT 结 构 或 一 个 CRect 对 象 , 该 结 构 或 对 象 将 用 来 接 收 由
nIndex 指 定 的 指 示 器 的 坐 标 。
此 成 员 函 数 用 来 将 由 nIndex 指 定 的 指 示 器 的 坐 标 拷 贝 到 由 lpRect 指 定 的 结 构 中去 。 坐 标 是 相 对 于 此 状 态 条 的 左 上 角 的 以 像 素 表 示 的 坐 标 。
请 参 阅 CStatusBar::CommandToIndex, CStatusBar::GetPaneInfo
CStatusBar::GetPaneInfo
void GetPaneInfo( int nIndex , UINT& nID , U INT& nStyle , int& cxWidth ) const;
参 数
nIndex
要 获 取 其 信 息 的 窗 格 的 索 引 。
nID
对 一 个 要 被 设 置 为 此 窗 格 的 ID 的 UINT 值 的 引 用 。
nStyle
对 一 个 要 被 设 置 为 此 窗 格 的 风 格 的 UINT 值 的 引 用 。
cxWidth
对 一 个 要 被 设 置 为 此 窗 格 的 宽 度 的 整 数 值 的 引 用 。
说 明
此 成 员 函 数 用 nID , nStyle 和 cxWidth 来 设 置 位 于 由 nIndex 指 定 的 位 置 的 指 示器 窗 格 的 ID , 风 格 和 宽 度 。
请 参 阅 CStatusBar::SetPaneInfo, CStatusBar::GetItemID, CStatusBar::GetItemRect
CStatusBar::GetPaneStyle
UINT GetPaneStyle( int nIndex ) const;
返 回 值
返 回 由 nIndex 指 定 的 状 态 条 窗 格 的 风 格 。
参 数
nIndex
要 获 取 其 风 格 的 窗 格 的 索 引 。
说 明
此 成 员 函 数 用 来 获 取 一 个 状 态 条 窗 口 的 风 格 。 一 个 窗 格 的 风 格 确 定 窗 格 显 示 的外 观 。
有 关 一 个 状 态 条 的 可 用 风 格 的 列 表 , 参 见 Create 。
请 参 阅 CStatusBar::Create, CStatusBar::SetPaneStyle
CStatusBar::GetPaneText
CString GetPaneText( int nIndex ) const;
void GetPaneText(int nIndex , CString& rString ) const;
返 回 值
返 回 一 个 包 含 窗 格 的 文 本 的 CString 对 象 。
参 数
nIndex
要 获 取 其 文 本 的 窗 格 的 索 引 。
rString
对 一 个 包 含 要 获 取 的 文 本 的 CString 对 象 的 引 用 。
说 明
此 成 员 函 数 用 来 获 取 显 示 在 一 个 状 态 条 窗 格 中 的 文 本 。 此 成 员 函 数 的 第 二 种 形式 用 字 符 串 文 本 来 填 充 一 个 CString 对 象 。
请 参 阅 CStatusBar::SetPaneText
CStatusBar::GetStatusBarCtrl CStatusBarCtrl& GetStatusBarCtrl( ) const; 返 回 值
返 回 一 个 对 CStatusBarCtrl 对 象 的 引 用 。
说 明
使 用 CStatusBarCtrl 可 以 利 用 W indows 状 态 条 通 用 控 件 的 性 能 , 并 且 可 以 利 用
CStatusBarCtrl 提 供 的 对 状 态 条 定 制 的 支 持 。 例 如 , 通 过 使 用 这 个 通 用 控 件 , 你可 以 指 定 一 种 风 格 , 使 得 状 态 条 上 有 一 个 调 整 大 小 的 把 手 , 或 者 你 可 以 指 定 一种 风 格 , 使 得 状 态 条 显 示 在 父 窗 口 的 客 户 区 的 顶 端 。
有 关 通 用 控 件 的 更 多 信 息 , 参 见“ W indows95 SDK 程 序 员 参 考 ” 中 的 通 用 控 件 。
CStatusBar::SetIndicators
BOOL SetIndicators( const UINT* lpIDArray , int nIDCount );
返 回 值
如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
lpIDArray
指 向 一 个 ID 数 组 的 指 针 。
nIDCount
由 lpIDArray 指 向 的 数 组 的 元 素 数 目 。
说 明
此 成 员 函 数 用 来 将 每 一 个 指 示 器 的 ID 设 置 为 由 数 组 lpIDArray 的 相 应 元 素 指 定的 值 , 加 载 由 每 一 个 ID 指 定 的 字 符 串 资 源 , 并 将 这 个 字 符 串 设 置 为 此 指 示 器的 文 本 。
请 参 阅 CStatusBar::CStatusBar, CStatusBar::Create, CStatusBar::SetPaneInfo, CStatusBar::SetPaneText
CStatusBar::SetPaneInfo
void SetPaneInfo( int nIndex , U INT nID , UINT nStyle , int cxWidth );
参 数
nIndex
要 设 置 其 风 格 的 指 示 器 窗 格 的 索 引 。
nID
该 指 示 器 窗 格 的 新 ID 。
nStyle
该 指 示 器 窗 格 的 新 风 格 。
cxWidth
该 指 示 器 窗 格 的 新 宽 度 。
说 明
此 成 员 函 数 用 来 设 置 指 示 器 窗 格 的 新 ID , 风 格 和 宽 度 。下 面 的 指 示 器 风 格 是 被 支 持 的 :
-
SBPS_NOBORDERS 在 窗 格 周 围 没 有 3-D 边 框 。
-
SBPS_POPOUT 反 转 边 界 以 使 文 字 “ 凸 出 来 ” 。
-
SBPS_DISABLED 不 绘 制 文 本 。
-
SBPS_STRETCH 扩 大 窗 格 以 填 充 不 用 的 空 白 空 间 。 没 有 状
态 条 只 能 有 一个 窗 格 具 有 这 种 风 格 。
-
SBPS_NO R MAL 没 有 扩 展 , 边 界 或 “ 凸 出 来 ” 。
请 参 阅 CStatusBar::GetPaneInfo
CStatusBar::SetPaneStyle
void SetPaneStyle( int nIndex , UINT nStyle );
参 数
nIndex
要 设 置 其 风 格 的 窗 格 的 索 引 。
nStyle
要 设 置 的 窗 格 的 风 格 。
说 明
此 成 员 函 数 用 来 设 置 一 个 状 态 条 窗 格 的 风 格 。 窗 格 的 风 格 决 定 了 窗 格 是 怎 么 显示 的 。
有 关 状 态 条 可 用 风 格 的 列 表 , 参 见 SetPaneInfo 。
请 参 阅 CStatusBar::Create, CStatusBar::GetPaneStyle
CStatusBar::SetPaneText
BOOL SetPaneText( int nIndex , LPCTSTR lpszNewText , BOOL bUpdate = TRUE );
返 回 值
如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。
参 数
nIndex
要 设 置 其 文 本 的 窗 格 的 索 引 。
lpszNewText
指 向 新 的 窗 格 文 本 的 指 针 。
bUpdate
如 果 是 TRUE , 则 在 文 本 被 设 置 之 后 , 窗 格 是 无 效 的 。
说 明
此 成 员 函 数 用 来 将 窗 格 文 本 设 置 为 由 lpszNewText 指 定 的 字 符 串 。
请 参 阅 CStatusBar::GetPaneText