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 或 索 引 值 访 问 一 个 指 示 器 。

缺 省 的 , 第 一 个 指 示 器 是 “ 可 伸 缩 的 ” : 该 指 示 器 占 据 了 其 它 指 示 器 窗 格 未 用到 的 状 态 条 长 度 , 因 此 其 它 窗 格 是 右 对 齐 的 。

可 以 按 下 列 步 骤 创 建 一 个 状 态 条 :

  1. 构造 CStatusBar 对 象 。

  2. 调用 Creat e( 或 CreateEx) 函 数 来 创 建 状 态 条 窗 口 并 将 它

    连 接 到 CStatusBar

对 象 。

  1. 调用 SetIndicators 函 数 将 字 符 串 ID 与 每 一 个 指 示 器 联 系

    起 来 。有 三 种 办 法 可 以 更 新 状 态 条 窗 口 中 的 文 本 :

  1. 调用 CWnd ::SetWindowText 只 更 新 窗 格 0 中 的 文 本 。

  2. 在 状 态 条 的 ON_UPDATE_COMMAND_UI 处 理 程 序 中 调 用

CCmdUI::SetText 函 数 。

  1. 调用 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

对 一 个 要 被 设 置 为 此 窗 格 的 宽 度 的 整 数 值 的 引 用 。

说 明

此 成 员 函 数 用 nIDnStylecxWidth 来 设 置 位 于 由 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