工 具 条 的 停 靠 控 制_第1页
工 具 条 的 停 靠 控 制_第2页
工 具 条 的 停 靠 控 制_第3页
工 具 条 的 停 靠 控 制_第4页
工 具 条 的 停 靠 控 制_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、工 具 条 的 停 靠 控 制 - 在VC5.0 中 开 发 大 型 应 用 程 序 时, 工 具 条 通 常 是 程 序 中 必 不 可 少 的 功 能 因 素, 在 整 个 窗 口 的 停 靠 位 置 尤 其 关 键, 它 直 接 影 响 到 程 序 界 面 的 外 观 形 象。 本 文 介 绍 各 类 工 具 条 停 靠 位 置 的 控 制 技 巧, 供 参 阅。 - 标 准 工 具 条 的 停 靠 控 制 - VC5.0 应 用 程 序 向 导 生 成 的 框 架 代 码 中, 都 具 有 普 通 工 具 条 的 控 制 方 法。 正 常 情 况 下 工 具 条 类CToolBar 是

2、 控 制 条 类CControlBar 的 派 生 类, 其 显 示 的 初 始 停 靠 位 置 是 通 过 调 用 继 承 的 函 数CControlBar:EnableDocking(DWORD dwStyle) 来 确 定 的, 其 参 数dwStyle 用 来 指 定 停 靠 的 具 体 位 置, 与 本 文 有 关 的 格 式 如 下( 其 余 请 参 阅VC5.0 的 联 机 文 档): - CBRS ALIGN TOP 停 靠 在 框 架 窗 口 客 户 区 域 顶 部; - CBRS ALIGN BOTTOM 停 靠 在 框 架 窗 口 客 户 区 域 底 部; - CBRS

3、ALIGN LEFT 停 靠 在 框 架 窗 口 客 户 区 域 左 边; - CBRS ALIGN RIGHT 停 靠 在 框 架 窗 口 客 户 区 域 右 边; - CBRS ALIGN ANY 停 靠 在 框 架 窗 口 客 户 区 域 任 何 位 置。 - 在 利 用 应 用 程 序 向 导AppWizard 生 成 的 应 用 程 序 中, 其 控 制 代 码 默 认 的 停 靠 位 置 为CBRS ALIGN ANY, 即 允 许 停 靠 在 框 架 窗 口 客 户 区 域 的 任 何 边 上。 工 具 条 在 正 常 显 示 时 停 靠 在 窗 口 客 户 区 域 的 顶 部,

4、 控 制 指 令 为EnableDocking(CBRS_ALIGN_ANY) 或m_wndToolBar. EnableDocking(CBRS_ALIGN_ANY), 注 意 在 实 际 程 序 控 制 时 前 者 必 须 处 于 所 有 其 他 控 制 代 码 的 前 面, 否 则 浮 动 工 具 条 或 特 殊 工 具 条 等 部 分 代 码 可 能 无 法 奏 效。 具 体 控 制 方 法 请 参 考 利 用 应 用 程 序 向 导 生 成 的 任 何 一 个 程 序 实 例 框 架 代 码 部 分 中 建 立 的 函 数ONCREATE()。 - 应 用 程 序 的 单 文 档 和

5、 多 文 档 的 窗 口 框 架 类 均 由CFrameWnd:EnableDocking(DWORD dwDockS tyle) 来 实 现 的, 其 可 选 的 参 数 除 上 述 五 种 之 外, 还 增 加 了CBRS FLOAT MULTI 参 数, 该 参 数 主 要 是 为 设 计 浮 动 工 具 条 而 增 加 的, 用 来 确 定 一 个 框 架 窗 口 中 允 许 存 在 多 个 浮 动 工 具 条。 同 样 利 用 应 用 程 序 向 导AppWizard 生 成 的 应 用 程 序, 其 默 认 的 停 靠 位 置 也 是CBRS ALIGN A NY, 即 允 许 工

6、 具 条 停 靠 在 框 架 窗 口 的 任 何 边 上, 其 默 认 的 初 始 位 置 为 框 架 窗 口 的 顶 部, 即En ableDocking(CBRS_ALIGN_ANY) 或m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY)。 - 浮 动 工 具 条 的 停 靠 控 制 - 当 一 个 框 架 窗 口 中 存 在 多 个 标 准 或 浮 动 工 具 条 时, 则 需 要 利 用 函 数void DockControlBar(CC ontrolBar pBar,UINT nDockBarID=0,LPCRECT lpRect=NULL) 来 确

7、 定 要 控 制 停 靠 位 置 的 工 具 条, 它 也 是CFrameWnd 类 的 成 员 函 数。 其 中 参 数pBar 用 来 指 向 被 控 制 停 靠 位 置 的 工 具 条 对 象 指 针, 参 数nDockBarID 用 来 确 定 工 具 条 停 靠 在 框 架 窗 口 的 哪 条 边 上, 其 控 制 的 具 体 取 值 为: - AFX IDW DOCKBAR TOP 停 靠 在 框 架 窗 口 的 顶 部; - AFX IDW DOCKBAR BOTTOM 停 靠 在 框 架 窗 口 的 底 部; - AFX IDW DOCKBAR LEFT 停 靠 在 框 架 窗

8、 口 的 左 边; - AFX IDW DOCKBAR RIGHT 停 靠 在 框 架 窗 口 的 右 边。 - 当 参 数nDockBarID 的 取 值 为0 时, 则 工 具 条 可 停 靠 在 框 架 窗 口 中 的 任 何 一 个 可 停 靠 的 边 上, 其 默 认 的 初 始 位 置 为 窗 口 顶 部。 - 并 列 工 具 条 的 停 靠 控 制 - 很 多 大 型 应 用 程 序 中 都 存 在 将 多 个 工 具 条 同 时 并 列 停 靠 在 某 窗 口 的 某 一 条 边 上 的 情 况。 对 这 种 停 靠 方 法, 可 利 用 上 述 工 具 条 控 制 函 数Do

9、ckControlBar 的lpRect 参 数, 通 过 控 制 工 具 条 的 停 靠 矩 形 区 域 的 方 法 来 实 现。 实 现 的 函 数 如 下: - 1. 在 实 现 文 件MainFrm.h 中 增 加 如 下 成 员 函 数 定 义: - void DockControlBarLeftOf(CToolBar Bar,CToolBar LeftOf); - 2. 在 实 现 文 件MainFrm.cpp 中 增 加 如 下 成 员 函 数: - void CMainFrame:DockControlBarLeftOf(CToolBar Bar,CTooIBar LeftOf

10、) - / 设 置 工 具 条 并 列 停 靠 在 同 一 条 边 上 - CRect rect; / 矩 形 区 域 定 义 - DWORD dw; - UINT n=0; - RecalcLayout(); / 重 新 显 示 - LeftOf >GetWindowRect( rect); - rect.Offset(1,0); / 设 置 偏 移 植 以 停 靠 在 同 一 边 上 - dw=LeftOf >GetBarStyle(); - n=(dw CBRS_ALIGN_TOP)?AFX_IDW_DOCKBAR_TOP:n; - n=(dw CBRS_ALIGN_BOTT

11、OM n=0)?AFX_IDW_DOCKBAR_BOTTOM:n; - n=(dw CBRS_ALIGN_LEFT n=0)?AFX_IDW_DOCKBAR_LEFT:n; - n=(dw CBRS_ALIGN_RIGHT n=0)?AFX_IDW_DOCKBAR_RIGHT:n; - DockControlBar(Bar,n, rect); - - 在 这 个 函 数 中 应 注 意 对RecalcLayout() 函 数 和OffestRect() 函 数 的 调 用, 前 者 用 来 重 新 显 示 被 调 整 的 客 户 区 和 工 具 条, 后 者 用 来 重 新 确 定 矩 形 区

12、 域, 这 相 当 于 利 用 鼠 标 将 第 二 个 工 具 条 窗 口 拖 动 到 前 一 个 工 具 条 上 然 后 释 放。 - 3. 修 改 应 用 程 序 建 立 函 数OnCreate() 中 的 相 应DockControlBar() 函 数 为DockControlBarOf() 函 数, 并 正 确 设 置 工 具 条 对 象 的 指 针。 笔 者 在 实 现 程 序 中 的 控 制 代 码 如 下: - EnableDocking(CBRS_ALIGN_ANY);/ 停 靠 位 置 必 须 在 最 前 面 - 工 具 条 建 立 函 数 - m_wndToolBar.En

13、ableDocking(CBRS_ALIGN_ANY); - m_wndTestToolBar.EnableDocking(CBRS_ALIGN_ANY); - DockControlBar( m_wndToolBar,AFX_IDW_DOCKBAR_TOP); - 使 两 个 工 具 条 并 列 停 靠 - DockControlBarLeftOf( m_wndTestToolBar, m_wndToolBar); - 工 具 条 的 顶 部 停 靠 控 制 - 1. 打 开 菜 单 资 源 增 加 顶 部 位 置 控 制 菜 单 项IDD_DLGBARTOP; - 2. 在 实 现 文 件

14、MainFrm.h 中 增 加 成 员 控 制 变 量m_bDialogTop: - BOOL m_bDialogTop; - 并 在 构 造 函 数 中 设 置 初 始 值; - 3. 利 用 类 向 导ClassWizard 为 菜 单 项 设 置 响 应 函 数; - 4. 在 实 现 文 件MainFrm.cpp 中 通 过 充 分 利 用SetWindowPos() 成 员 完 善 消 息 映 射 功 能。 void CMainFrame:OnButtonDIgbartop() / 定 制 工 具 条 顶 部 位 置 控 制 函 数if (m_bDialogTop) m_wndDIgBar.SetWindowPos( m_wndStatusBar,0,0,0,0, SWP_NOSIZE|SWP_NOMOVE); / 顶 部 工 具 条 停 靠 在 窗 口 边, 左 右 工 具 条 停 靠 其 下else m_wndDIgBar.SetWindowPos( wndTop,0,0,0,0, SWP_NOSIZE|SWP_NOMOVE);/ 停 靠 在 最 顶 部

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论