CScrollBar

CScrollBar 类 支 持 一 个 W indows 滚 动 条 控 件 的 功 能 。

创 建 一 个 滚 动 条 控 件 分 为 两 步 。 首 先 , 调 用 构 造 函 数 CScrollBar 来 构 造 一 个CScrollBar 对 象 , 然 后 调 用 C reate 成 员 函 数 来 创 建 W indows 滚 动 条 控 件 并 将 它与 CScrollBar 对 象 相 联 系 。

如 果 你 是 在 一 个 对 话 框( 通 过 一 个 对 话 框 资 源 ) 中 创 建 一 个 CScrollBar 对 象 的 ,

则 当 用 户 关 闭 这 个 对 话 框 时 , CScrollBar 自 动 销 毁 。

如 果 你 是 在 一 个 窗 口 中 创 建 一 个 CScrollBar 对 象 , 则 你 必 须 负 责 销 毁 该 对 象 。

如 果 你 是 堆 栈 中 创 建 CScrollBar 对 象 , 则 该 对 象 将 会 自 动 销 毁 。 如 果 你 是 通 过使 用 New 函 数 在 数 据 堆 中 创 建 CScrollBar 对 象 , 则 当 用 户 终 止 使 用 该 W indows 滚 动 条 时 , 你 必 须 调 用 delete 来 销 毁 该 对 象 。

如 果 你 在 此 CScrollBar 对 象 中 分 配 了 任 何 内 存 , 则 应 重 载 CScrollBar 析 构 函 数来 释 放 这 些 内 存 。

#include <afxwin.h>

请 参 阅 C Wnd, CButton, CComboBox, CEdit, CListBox, CStatic, CDialog

CScrollBar 类 成 员

Construction

CscrollBar 构 造 一 个 CScrollBar 对 象

Initialization

Create 创 建 W indows 滚 动 条 , 并 将 它 连 接 到 CScrollBar

对 象 上

Operation s GetScrollPos 获 取 一 个 滚 动 框 的 当 前 位 置

SetScrollPos 设 置 一 个 滚 动 框 的 当 前 位 置

GetScrollRange 获 取 给 定 滚 动 条 的 当 前 最 大 和 最 小 滚 动 条 位 置SetScrollRange 设 置 给 定 滚 动 条 的 最 小 和 最 大 位 置ShowScrollBar 显 示 或 隐 藏 一 个 滚 动 条

EnableScrollBar 使 一 个 滚 动 条 的 一 个 或 两 个 箭 头 有 效 或 无 效

SetScrollInfo 设 置 有 关 滚 动 条 的 信 息

GetScrollInfo 获 取 有 关 滚 动 条 的 信 息

GetScrollLimit 获 取 滚 动 条 的 极 限

成 员 函 数

CScrollBar::Create

BOOL Create( DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , UINT

nID );

返 回 值

如 果 成 功 则 返 回 非 零 值 ; 否 则 返 回 0 。

参 数

dwStyle

指 定 滚 动 条 的 风 格 。 任 何 滚 动 条 风 格 的 组 合 都 适 用 于 滚 动 条 。

rect

指 定 滚 动 条 的 大 小 和 位 置 。 可 以 是 一 个 RECT 结 构 或 是 一 个 CRect 对 象 。

pParentWnd

指 定 滚 动 条 的 父 窗 口 , 通 常 是 一 个 CDialog 对 象 。 它 不 能 是 NULL 。

NID

该 滚 动 条 的 控 件 ID 。

说 明

可 以 分 两 步 构 造 一 个 CScrollBar 对 象 。首 先 调 用 构 造 函 数 来 构 造 一 个 CScrollBar 对 象 ; 然 后 调 用 Create 来 创 建 并 初 始 化 关 联 的 W indows 滚 动 条 , 并 将 它 连 接到 该 CScrollBar 对 象 上 。

可 以 将 下 列 窗 口 风 格 使 用 到 一 个 滚 动 条 :

  • WS_CHILD 总 要 使 用 。

  • WS_VISIBLE 常 用 。

  • WS_DISABLED 少 用 。

  • WS_GROUP 将 控 件 分 组 。

请 参 阅 CScrollBar::CScrollBar

CScrollBar::CScrollBar

CScrollBar( );

说 明

此 成 员 函 数 用 来 构 造 一 个 CScrollBar 对 象 。 在 构 造 对 象 之 后 , 调 用 Create 成员函 数 来 创 建 并 初 始 化 Windows 滚 动 条 。

请 参 阅 CScrollBar::Create

CScrollBar::EnableScrollBar

BOOL EnableScrollBar( UINT nArrowFlags = ESB_ENABLE_BOTH );

返 回 值

如 果 按 指 定 的 要 求 使 箭 头 有 效 或 无 效 , 则 返 回 非 零 值 ; 否 则 返 回 0 , 这 表 明 箭头 已 经 处 于 需 要 的 状 态 , 或 者 是 发 生 了 一 个 错 误 。

参 数

nArrowFlags

指 定 是 要 使 给 定 箭 头 有 效 还 是 无 效 , 及 是 使 哪 一 个 箭 头 有 效 或 无 效 。 这个 参 数 可 以 是 下 列 值 之 一 :

  • ESB_ENABLE_BOTH 使 滚 动 条 的 两 个 箭 头 都 有 效 。

  • ESB_DISABLE_LTUP 使 水 平 滚 动 条 的 左 箭 头 或 垂 直 滚 动 条

    的 上 箭 头无 效 。

  • ESB_DISABLE_RTDN 使 水 平 滚 动 条 的 右 箭 头 或 垂 直 滚 动 条

    的 下 箭

头 无 效 。

  • ESB_DISABLE_BOTH 使 滚 动 条 的 两 个 箭 头 都 无 效 。

说 明

此 成 员 函 数 用 来 使 滚 动 条 的 一 个 或 两 个 箭 头 有 效 或 无 效 。

请 参 阅 CWnd::EnableScrollBar, ::EnableScrollBar

CScrollBar::GetScrollInfo

BOOL GetScrollInfo( LPSCROLLINFO lpScrollInfo , UINT nMask );

返 回 值

如 果 消 息 获 取 了 任 何 值 , 则 返 回 TRUE ; 否 则 返 回 FALSE 。

参 数

lpScrollInfo

指 向 一 个 SCROLLINFO 结 构 的 指 针 。 参 见 “ W in32 程 序 员 参 考 ” 可 以 获得 更 多 有 关 这 个 结 构 的 信 息 。

nMask

指 定 要 获 取 的 滚 动 条 参 数 。通 常 使 用 的 是 :SIF_ALL ,表 示 是 SIF_PAGE , SIF_POS , SIF_TRACKPOS 和 SIF_RANGE 的 组 合 。 参 见 SCROLLINFO

可 以 获 得 有 关 n M ask 值 的 更 多 信 息 。

说 明

此 成 员 函 数 用 来 获 取 由 SCROLLINFO 结 构 保 存 的 关 于 一 个 滚 动 条 的 信 息 。

GetScrollInfo 允 许 应 用 程 序 使 用 32 位 的 滚 动 位 置 信 息 。

SCROLLINFO 结 构 包 含 了 有 关 一 个 滚 动 条 的 信 息 , 包 括 滚 动 位 置 的 最 小 和 最大 值 , 页 面 的 大 小 和 滚 动 框 ( 拇 指 ) 的 位 置 。 参 见 “ W in32 SDK 程 序 员 参 考 ” 中 的 SCROLLINFO 结 构 主 题 , 可 以 获 得 有 关 改 变 结 构 的 缺 省 值 的 更 多 信 息 。

MFC Windows 消 息 句 柄 表 示 了 滚 动 条 的 位 置 , CWnd::OnHScroll 和CWnd::OnVScroll 只 提 供 16 位 的 位 置 数 据 。 GetScrollInfo 和 SetScrollInfo 提供32 位 的 滚 动 条 位 置 数 据 。因 此 ,一 个 应 用 程 序 在 处 理 GetScrollInfo 或 SetScrollInfo 时 , 可 以 调 用 GetScrollInfo 来 获 取 32 位 的 滚 动 条 位 置 数 据 。

请 参 阅 CScrollBar::SetScrollInfo, CWnd::SetScrollInfo, CWnd::SetScrollPos, CWnd::OnVScroll, CWnd::OnHScroll, SCROLLINFO

CScrollBar::GetScrollLimit

int GetScrollLimit( );

返 回 值

如 果 成 功 则 返 回 值 指 定 滚 动 条 最 大 位 置 ; 否 则 返 回 值 为 0 。

说 明

此 成 员 函 数 用 来 获 取 滚 动 条 的 最 大 滚 动 位 置 。

请 参 阅 CWnd::GetScrollLimit

CScrollBar::GetScrollPos

int GetScrollPos( ) const;

返 回 值

如 果 成 功 则 返 回 指 定 滚 动 框 当 前 位 置 的 值 ; 否 则 返 回 0 。

说 明

此 成 员 函 数 用 来 获 取 一 个 滚 动 框 的 当 前 位 置 。 这 个 当 前 位 置 是 一 个 相 对 值 , 它依 赖 于 当 前 的 滚 动 范 围 。 例 如 , 如 果 滚 动 范 围 是 100 到 200 , 而 滚 动 框 是 在 滚动 条 的 中 间 , 则 这 个 当 前 位 置 是 150 。

请 参 阅 CScrollBar::SetScrollPos, CScrollBar::GetScrollRange, CScrollBar::SetScrollRange, ::GetScrollPos

CScrollBar::GetScrollRange

void GetScrollRange( LPINT lpMinPos , LPINT lpMaxPos ) const;

参 数

lpMinPos

指 向 一 个 用 来 接 收 最 小 位 置 的 整 型 变 量 。

lpMaxPos

指 向 一 个 用 来 接 收 最 大 位 置 的 整 型 变 量 。

说 明

此 成 员 函 数 将 滚 动 条 的 当 前 滚 动 条 位 置 的 最 小 和 最 大 值 拷 贝 为 lpMinPos

lpMaxPos 指 定 的 值 。

  • 个 滚 动 条 控 件 的 缺 省 范 围 是 空 ( 两 个 值 都 为 零 ) 。

请 参 阅 ::GetScrollRange, CScrollBar::SetScrollRange, CScrollBar::GetScrollPos, CScrollBar::SetScrollPos

CScrollBar::SetScrollInfo

BOOL SetScrollInfo( LPSCROLLINFO lpScrollInfo , BOOL bRedraw = TRUE );

返 回 值

如 果 成 功 则 返 回 TRUE ; 否 则 返 回 FALSE 。

参 数

lpScrollInfo

指 向 一 个 SCROLLINFO 结 构 的 指 针 。

bRedraw

指 示 这 个 滚 动 条 是 否 应 重 画 以 反 映 新 的 信 息 。 如 果 bRedraw 是 TRUE , 则 滚 动 条 被 重 画 。 如 果 它 是 FALSE , 则 不 重 画 滚 动 条 。 缺 省 的 , 滚 动 条将 被 重 画 。

说 明

此 成 员 函 数 用 来 设 置 SCROLLINFO 结 构 保 持 的 有 关 一 个 滚 动 条 的 信 息 。 你 必

须 提 供 SCROLLINFO 结 构 参 数 需 要 的 值 , 包 括 标 志 值 。

SCROLLINFO 结 构 包 含 了 有 关 一 个 滚 动 条 的 信 息 , 包 括 滚 动 位 置 的 最 小 和 最大 值 , 页 面 的 大 小 和 滚 动 框 ( 拇 指 ) 的 位 置 。 参 见 “ W in32 SDK 程 序 员 参 考 ” 中 的 SCROLLINFO 结 构 主 题 , 可 以 获 得 有 关 改 变 此 结 构 的 缺 省 值 的 更 多 信 息 。

请 参 阅 CScrollBar::GetScrollInfo, CWnd::SetScrollInfo, CWnd::SetScrollPos, CWnd::OnVScroll, CWnd::OnHScroll, CWnd::GetScrollInfo, SCROLLINFO

CScrollBar::SetScrollPos

int SetScrollPos( int nPo s , BOOL bRedraw = TRUE );

返 回 值

如 果 成 功 则 返 回 滚 动 框 的 先 前 位 置 ; 否 则 返 回 0 。

参 数

nPos

指 定 滚 动 框 的 新 位 置 。 它 必 须 是 在 滚 动 范 围 之 内 。

bRedraw

指 示 滚 动 条 是 否 应 该 被 重 画 来 反 映 新 的 位 置 。 如 果 bRedraw 是 TRUE , 则 滚 动 条 被 重 画 。 如 果 它 是 FALSE , 则 不 重 画 滚 动 条 。 缺 省 的 , 滚 动 条将 被 重 画 。

说 明

此 成 员 函 数 用 来 将 一 个 滚 动 框 的 当 前 位 置 设 置 为 nPos 指 定 的 位 置 , 并 且 , 如果 指 定 了 重 画 , 则 重 画 滚 动 条 来 反 映 新 的 位 置 。

请 参 阅 CScrollBar::GetScrollPos, CScrollBar::GetScrollRange, CScrollBar::SetScrollRange, ::SetScrollPos

CScrollBar::SetScrollRange

void SetScrollRange( int nMinPo s , int nMaxPo s , BOOL bRedraw = TRUE );

参 数

nMinPos

指 定 滚 动 位 置 的 最 小 值 。

nMaxPos

指 定 滚 动 位 置 的 最 大 值 。

bRedraw

指 示 是 否 要 重 画 滚 动 条 来 反 映 改 变 。 如 果 bRedraw 是 TRUE , 则 滚 动 条被 重 画 。 如 果 它 是 FALSE , 则 不 重 画 滚 动 条 。 缺 省 的 , 滚 动 条 将 被 重 画 。

说 明

此 成 员 函 数 用 来 为 给 定 的 滚 动 条 设 置 滚 动 位 置 的 最 小 和 最 大 值 。如 果 将 nMinPos

nMaxPos 都 设 置 为 零 , 则 隐 藏 此 标 准 滚 动 条 。

当 处 理 一 个 滚 动 条 通 知 消 息 时 , 不 要 调 用 这 个 函 数 来 隐 藏 一 个 滚 动 条 。

如 果 在 调 用 SetScrollRange 之 后 , 立 即 调 用 SetScrollPos 成 员 函 数 , 则 在

SetScrollPos 中 将 bRedraw 设 置 为 0 , 以 禁 止 滚 动 条 被 重 画 两 次 。

nMinPosnMaxPos 指 定 的 间 隔 值 必 须 不 大 于 32,767 。 一 个 滚 动 条 控 件 的 缺省 范 围 是 空 ( nMinPosnMaxPos 都 为 0 ) 。

请 参 阅 CScrollBar::GetScrollPos, CScrollBar::SetScrollPos, CScrollBar::GetScrollRange, ::SetScrollRange

CScrollBar::ShowScrollBar

void ShowScrollBar( BOOL bShow = TRUE );

参 数

bShow

指 示 是 显 示 还 是 隐 藏 滚 动 条 。 如 果 这 个 参 数 是 TRUE , 则 显 示 滚 动 条 ; 否 则 隐 藏 滚 动 条 。

说 明

此 成 员 函 数 用 来 显 示 或 隐 藏 一 个 滚 动 条 。

当 应 用 程 序 在 处 理 一 个 滚 动 条 通 知 消 息 时 , 不 要 调 用 这 个 函 数 来 隐 藏 滚 动 条 。

请 参 阅 CScrollBar::GetScrollPos, CScrollBar::GetScrollRange, CWnd::ScrollWindow,

CScrollBar::SetScrollPos, CScrollBar::SetScrollRange