C O le Document

COleDo c ument 是 OLE 文 档 的 基 类 , 它 支 持 可 视 化 编 辑 。

COleDocument 从 CDocument 派 生 来 , 这 使 你 的 OLE 应 用 程 序 能 够 使 用 由 微 软基 础 类 库 提 供 的 文 档 /视 结 构 。

COleDocument 将 文 档 当 作 一 个 处 理 OLE 项 的 CDocItem 对 象 的 集 合 。 容 器 和服 务 器 应 用 都 需 要 这 样 的 结 构 , 因 为 它 们 的 文 档 必 须 能 够 包 容 OLE 项 。 类COleServerItem 和类 COleClientItem 都从 CDocItem 派 生 而 来 , 它 们 管 理 应 用 程序 与 OLE 项 之 间 的 相 互 作 用 。

如 果 你 正 在 编 写 一 个 简 单 的 容 器 应 用 程 序 , 最 好 从 COleDocument 派 生 出 你 的文 档 类 。 如 果 你 正 在 编 写 一 个 支 持 链 接 到 文 档 包 含 的 嵌 入 项 的 容 器 应 用 程 序 , 最 好 从 COleLinkingDoc 派 生 出 你 的 文 档 类 。 如 果 你 正 在 编 写 一 个 服 务 器 应 用程 序 或 者 是 组 合 容 器 / 服 务 器 , 最 好 从 COleServerDoc 派 生 出 你 的 文 档 类 。COleLinkingDoc 和 COleServerDoc 是 从 COleDocument 派 生 而 来 的 , 因 此 这 些

类 继 承 了 所 有 在 COleDocument 和 CDocument 中 具 有 的 服 务 。

要 使 用 COleDocument , 可 以 从 它 派 生 出 一 个 类 , 并 添 加 一 些 功 能 用 来 管 理 应用 中 除 嵌 入 或 链 接 项 外 的 其 它 非 OLE 数 据 。 如 果 你 将 从 CDocItem 派 生 而 来 的类 定 义 为 用 来 保 存 应 用 的 内 部 数 据 , 你 可 以 使 用 由 COleDocument 定 义 的 工 具来 保 存 你 的 OLE 数 据 和 非 OLE 数 据 。 也 可 以 设 计 你 自 己 的 数 据 结 构 来 保 存 你的 非 OLE 数 据 , 以 区 别 于 你 的 OLE 项 。 更 多 的 信 息 , 参 见 “ Visual C++ 程 序员 指 南 ” 一 书 中 的 文 章 “ 容 器 : 复 合 文 件 ” 。

如 果 提 供 了 邮 件 支 持 ( MAP I ) 的 话 , CDocument 支 持 将 你 的 文 档 通 过 邮 件 发送 。 COleDocument 已 经 更 新 了 OnFileSendMail, 可 以 正 确 处 理 捆 绑 在 一 起 的文 档 。 更 多 的 信 息 , 参 见 “ V isual C++ 程 序 员 指 南 ” 一 书 中 的 文 章 “ MAPI 主题 ” 和 “ MFC 中 的 MAPI 支 持 ” 。

#include <afxole.h>

CO leDocument 类 成 员

Construction

ColeDocument 构 造 一 个 COleDocument 对 象

Operation s HasBlankItems 检 查 文 档 中 的 空 项

EnableCompoundFile 使 文 档 能 够 被 用 OLE 结 构 保 存 文 件 格 式 来 保 存

GetInPlaceActiveItem 返 回 当 前 正 处 于 活 动 状 态 的 OLE 项

GetStartPosition 获 得 开 始 重 复 的 初 始 位 置

GetNextItem 获 取 下 一 个 要 重 复 的 文 档 项GetNextClientItem 获 取 下 一 个 要 重 复 的 客 户 项GetNextServerItem 获 取 下 一 个 要 重 复 的 服 务 器 项

UpdateModifiedFlag 如 果 任 何 一 个 被 包 容 的 OLE 项 被 修 改 , 则 标 记 该

文 档 为 已 被 修 改

ApplyPrintDevice 为 文 档 中 的 所 有 客 户 项 设 置 打 印 目 标 设 备

AddItem 向 文 档 保 持 的 项 列 表 中 添 加 一 个 项

RemoveItem 从 文 档 保 持 的 项 列 表 中 移 走 一 个 项

Overridables

GetPrimarySelectedItem 返 回 文 档 中 最 初 选 择 的 OLE 项

OnShowViews 在 文 档 变 为 可 见 和 不 可 见 时 被 调 用

M ail Function

OnFileSendMail 发 送 一 个 附 着 有 文 档 的 邮 件 消 息

M essage Handlers

OnEditChangeIcon 处 理 Change Icon 菜 单 命 令 中 的 事 件

OnEditConvert 处 理 一 个 嵌 入 或 链 接 对 象 从 一 种 类 型 到 另 一 种 类 型

的 转 换

OnEditLinks 处 理 Edit 菜 单 上 的 Links 命 令 中 的 事 件

M essage Handlers

OnUpdateEditChangeIc on OnUpdateEditLinksMen u OnUpdateObjectVerbM enu

由 框 架 调 用 来 更 新 Edit/Change Icon 菜 单 选 项 的 命令 U I

由 框 架 调 用 来 更 新 Edit/Links 菜 单 选 项 的 命 令 U I

由 框 架 调 用 来 更 新 Edit/Object Name 菜 单 选 项 和 从

Edit/ObjectName 访

问 的 Verb 子 菜 单 的 命 令 U I

M essage Handlers OnUpdatePasteLinkMen u

由 框 架 调 用 来 更 新 Paste Special 菜 单 选 项 的 命 令 UI

OnUpdatePasteMenu 由 框 架 调 用 来 更 新 Paste 菜 单 选 项 的 命 令 U I

成 员 函 数

CO leDocument::AddItem

virtual void AddItem(CDocItem* pItem );

参 数

pItem

指 向 要 增 加 的 文 档 项 的 指 针 。

调 用 这 个 函 数 可 以 向 文 档 中 增 加 一 个 项 。 当 它 被 COleClientItem 或 者COleServerItem 的 构 造 函 数 调 用 时 , 你 不 必 显 式 地 调 用 这 个 函 数 , 上 述 的 构 造函 数 接 收 一 个 指 向 文 档 的 指 针 。

请 参 阅 CDocItem , COleDocument::RemoveItem ,

COleServerItem::COleServerItem ,

COleClientItem::COleClientItem

CO leDocument::ApplyPrintDevice

BOOL ApplyPrintDevice(const DVTARGETDEVICE FAR* ptd ); BOOL ApplyPrintDevice(const PRINTDLG* ppd );

如 果 函 数 执 行 成 功 则 返 回 非 零 值 , 否 则 返 回 0 。

参 数

ptd

指 向 一 个 DVTARGETDEVICE 数 据 结 构 的 指 针 , 该 数 据 结 构 包 含 有 关 新的 目 标 打 印 设 备 的 信 息 。 它 可 以 为 NUL L 。

ppd

指 向 一 个 PRINTDLG 数 据 结 构 的 指 针 , 该 数 据 结 构 包 含 有 关 新 的 目 标 打印 设 备 的 信 息 。 它 可 以 为 NULL 。

说 明

调 用 这 个 函 数 可 以 为 你 应 用 程 序 中 的 容 器 文 档 中 的 所 有 嵌 入 COleClientItem 项

改 变 目 标 打 印 设 备 。 此 函 数 为 所 有 的 项 更 新 目 标 打 印 设 备 , 但 是 不 为 这 些 项 刷新 显 示 高 速 缓 存 。 要 更 新 一 个 项 的 显 示 高 速 缓 存 , 可 以 调 用COleClientItem::UpdateLink。

送 往 这 个 函 数 的 参 数 包 含 了 OLE 用 来 标 识 目 标 设 备 的 信 息 。 PRINTDLG 结 构包 含 了 W indows 用 来 初 始 化 通 用 打 印 对 话 框 的 信 息 。 在 用 户 关 闭 了 对 话 框 之后 , Windows 返 回 用 户 在 这 个 结 构 中 选 择 的 信 息 。 一 个 CPrintDialog 对 象 的 成员 m_pd 是 一 个 PRINTDLG 结 构 。

更 多 的 信 息 , 参 见 W in32 SDK 文 档 中 的 PRINTDLG 结 构 。

进 一 步 的 信 息 , 参 见 “ OLE 2 程 序 员 参 考 , 卷 1 ” 中 的 DVTARGETDEVICE

结 构 。

请 参 阅 CPrintDialog

CO leDocument::COleDocument

COleDocument();

说 明

构 造 一 个 COleDocument 对 象 。

CO leDocument::EnableCompoundFile

void EnableCompoundFile(BOOL bEnable = TRUE);

参 数

bEnable

指 明 是 否 能 够 进 行 复 合 文 件 支 持 。

如 果 你 希 望 用 复 合 文 件 格 式 来 保 存 文 档 , 请 调 用 这 个 函 数 。 这 也 被 称 作 结 构 化存 储 。 调 用 这 个 函 数 的 典 型 做 法 是 在 COleDocument 派 生 类 的 构 造 函 数 中 进 行 。有 关 复 合 文 档 的 更 进 一 般 信 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 一 书 中 的 文 章“ 容 器 : 复 合 文 件 ” 。

在 为 文 档 设 置 好 是 否 能 够 支 持 复 合 文 件 之 后 , 则 在 文 档 的 整 个 生 命 周 期 中 这 个设 置 是 不 能 改 变 的 。

请 参 阅 COleClientItem

CO leDocument::GetInPlaceActiveItem

COleClientItem* GetInPlaceActiveItem(CWnd* pWnd);

指 向 单 一 的 、 正 处 于 活 动 状 态 的 OLE 项 的 指 针 ; 如 果 当 前 没 有 正 处 于 活 动 状态 的 OLE 项 , 则 返 回 值 为 NULL 。

参 数

pWnd

指 向 显 示 容 器 文 档 的 窗 口 的 指 针 。

说 明

调 用 这 个 函 数 可 以 获 得 框 架 窗 口 中 正 处 于 活 动 状 态 的 OLE 项 , 该 框 架 窗 口 包含 有 由 pWnd 标 识 的 视 图 。

请 参 阅 COleClientItem

CO leDocument::GetNextClientItem

COleClientItem* GetNextClientItem(POSITION& po s) const;

返 回 值

指 向 文 档 中 下 一 个 客 户 项 的 指 针 , 如 果 没 有 更 多 的 客 户 项 则 返 回 NULL 。

参 数

pos

是 对 上 一 次 调 用 GetNextClientItem 设 置 的 POSITION 值 的 引 用 ; 其 初 值是 成 员 函 数 GetStartPosition 返 回 的 。

说 明

调 用 这 个 函 数 可 以 重 复 地 访 问 你 的 文 档 中 的 每 一 个 客 户 项 。 每 一 次 调 用 之 后 ,

为 文 档 中 的 下 一 个 项 设 置 了 pos 的 值 , 这 些 项 有 可 能 是 也 有 可 能 不 是 一 个 客 户项 。

示 例

// COleDocument::GetNextClientItem 示例

// pDoc points to a COleDocument object POSITION pos = pDoc->GetStartPosition(); COleClientItem *pItem;

while((pItem = pDoc->GetNextClientItem(pos)) != NULL)

{

// Use pItem

}

请 参 阅 COleClientItem , COleDocument::GetStartPosition , COleDocument::GetNextServerItem , COleDocument::GetNextItem

CO leDocument::GetNextItem

virtual CDocItem* GetNextItem(POSITION& po s) const;

返 回 值

指 向 在 指 定 位 置 的 文 档 项 的 指 针 。

参 数

pos

是 上 一 次 调 用 GetNextItem 设 置 的 POSITION 值 的 引 用 ; 其 初 值 是 成 员函 数 GetStartPosition 的 返 回 值 。

说 明

调 用 这 个 函 数 可 以 重 复 访 问 你 的 文 档 中 的 每 一 个 项 。 在 每 一 次 调 用 之 后 , pos

的 值 被 设 置 为 文 档 中 下 一 个 项 的 POSITION 值 。 如 果 被 获 取 的 元 素 是 文 档 中 的最 后 一 个 元 素 , 则 pos 的 新 值 为 NULL 。

示 例

// Example for COleDocument::GetNextItem

// pDoc points to a COleDocument object POSITION pos = pDoc->GetStartPosition(); CDocItem *pItem;

while( pos != NULL )

{

pItem = pDoc->GetNextItem( pos );

// Use pItem

}

请 参 阅 COleDocument::GetStartPosition , COleDocument::GetNextClientItem ,

COleDocument::GetNextServerItem

CO leDocument::GetNextServerItem

COleServerItem* GetNextServerItem( POSITION& pos ) const;

返 回 值

指 向 文 档 中 下 一 个 服 务 器 项 的 指 针 , 如 果 没 有 更 多 的 项 则 返 回 NULL 。

参 数

pos

是 上 一 次 调 用 GetNextServerItem 设 置 的 POSITION 值 的 引 用 ; 其 初 值 是成 员 函 数 GetStartPosition 的 返 回 值 。

说 明

调 用 这 个 函 数 可 以 重 复 访 问 你 的 文 档 中 的 每 一 个 服 务 器 项 。 在 每 一 次 调 用 之

后 , pos 的 值 为 文 档 中 的 下 一 个 项 而 被 设 置 , 这 个 项 可 能 是 也 可 能 不 是 一 个 服务 器 项 。

示 例

// Example for COleDocument::GetNextServerItem

// pDoc points to a COleDocument object POSITION pos = pDoc->GetStartPosition(); CO leServe rItem *pItem;

while( ( pItem = pDoc->GetNextServerItem( pos ) ) != NULL )

{

// Use pItem

}

请 参 阅 COleServerItem , COleDocument::GetStartPosition , COleDocument::GetNextClientItem , COleDocument::GetNextItem

CO leDocument::GetPrimarySelectedItem

virtual COleClientItem* GetPrimarySelectedItem( CView* pView );

返 回 值

指 向 一 个 单 一 的 已 被 选 择 的 OLE 项 的 指 针 ; 如 果 没 有 或 者 没 有 多 于 一 个 OLE

项 被 选 择 则 返 回 NULL 。

参 数

pView

指 向 显 示 在 文 档 中 的 活 动 视 图 对 象 的 指 针 。

说 明

由 框 架 调 用 此 成 员 函 数 来 获 取 指 定 视 中 的 当 前 已 被 选 择 的 OLE 项 。 函 数 的 缺

省 实 现 搜 索 被 包 含 的 OLE 项 列 表 , 以 获 得 一 个 单 一 的 被 选 择 的 项 , 并 返 回 指向 这 个 项 的 指 针 。 如 果 没 有 被 选 中 的 项 , 或 者 没 有 多 于 一 个 的 被 选 择 的 项 , 则函 数 返 回 NULL 。 为 了 使 这 个 函 数 工 作 , 你 必 须 在 你 的 视 类 中 重 载 成 员 函 数CView::IsSelected 。 如 果 你 有 用 于 保 存 被 包 含 OLE 项 的 自 己 的 方 法 , 请 重 载 这个 函 数 。

请 参 阅 CView::IsSelected

CO leDocument::GetStartPosition virtual POSITION GetStartPosition() const; 返 回 值

一 个 POSITION 值 , 可 以 用 来 在 整 个 文 档 的 项 中 开 始 重 复 ; 如 果 文 档 没 有 项 则返 回 值 为 NULL 。

调 用 这 个 函 数 可 以 获 得 文 档 中 第 一 个 项 的 位 置 。 可 以 将 返 回 值 传 递 给

GetNextItem , GetNextClientItem , 或 者 是 GetNextServerItem 。

请 参 阅 COleDocument::GetNextItem , COleDocument::GetNextClientItem ,

COleDocument::GetNextServerItem

CO leDocument::HasBlankItems

BOOL HasBlankItems() const;

返 回 值

如 果 文 档 包 含 任 何 空 项 则 返 回 非 零 值 ; 否 则 返 回 0 。

调 用 这 个 函 数 可 以 确 定 文 档 是 否 包 含 空 项 。 一 个 空 项 是 一 个 其 矩 形 为 空 的 项 。

请 参 阅 CDocItem::IsBlank

CO leDocument::OnEditChangeIcon

afx_msg void OnEditChangeIcon();

说 明

显 示 OLE Change Icon 对 话 框 , 并 将 代 表 当 前 选 定 的 OLE 项 的 图 标 改 变 为 用户 在 对 话 框 中 选 定 的 图 标 。 OnEditChangeIcon 创 建 并 给 出 一 个COleChangeIconDialog 改 变 图 标 对 话 框 。

请 参 阅 COleDocument::OnUpdateEditChangeIcon, COleChangeIconDialog

CO leDocument::OnEditConvert

afx_msg void OnEditConvert();

说 明

显 示 OLE Convert 对 话 框 , 并 根 据 用 户 在 对 话 框 中 的 选 择 转 换 或 激 活 被 选 定 的

OLE 项 。 OnEditConvert 创 建 并 推 出 一 个 COleConvertDialog 转 换 对 话 框 。

有 关 转 换 的 一 个 例 子 就 是 将 一 个 Microsoft 的 Word 文 档 转 换 为 一 个 WordPad

文 档 。

请 参 阅 COleDocument::OnUpdateO b jectVerbMenu , COleConvertDialog

CO leDocument::OnEditLinks

afx_msg void OnEditLinks();

说 明

显 示 OLE Edit/Links 对 话 框 。 OnEditLinks 创 建 并 推 出 一 个 COleLinksDialog 链接 对 话 框 , 让 用 户 改 变 被 链 接 的 对 象 。

请 参 阅 COleDo c ument::OnUpdateEditLinksMenu , COleLinksDialog

CO leDocument::OnFileSendMail

afx_msg void OnFileSendMail();

说 明

通 过 一 个 存 在 的 邮 件 主 机 ( 任 何 一 个 ) 发 送 一 个 消 息 , 将 文 档 作 为 一 个 附 着 物 。OnFileSendMail 调 用 OnSaveDocument 将 一 个 无 标 题 的 或 已 被 修 改 的 文 档 保 存到 一 个 临 时 文 件 中 , 这 个 文 件 将 被 通 过 电 子 邮 件 发 送 。 如 果 文 档 没 有 被 修 改 ,

则 不 需 要 一 个 临 时 文 件 ; 被 发 送 的 是 原 始 的 文 档 。 如 果 MAPI32.DLL 没 有 被 载入 , 则 OnFileSendMail 会 载 入 它 。

与 OnFileSendMail 在 CDocument 中 的 实 现 不 同 , 这 个 函 数 正 确 处 理 复 合 文 件 。

更 多 的 消 息 , 参 见 “ Visual C++ 程 序 员 指 南 ” 一 书 中 的 文 章 “ MAPI 主 题 ” 和“ M FC 中 的 MAPI 支 持 ” 。

请 参 阅 CDocument::OnFileSendMail , CDocument::OnUpdateFileSendMail , CDocument::OnSaveDocument

CO leDocument::OnShowViews

virtual void OnShowViews( BOOL bVisible );

参 数

bVisible

说 明

在 文 档 的 可 见 性 状 态 改 变 后 , 框 架 就 调 用 这 个 函 数 。

这 个 函 数 的 缺 省 版 本 什 么 也 不 做 。 如 果 当 文 档 的 可 见 性 改 变 时 你 的 应 用 程 序 必须 执 行 任 何 特 别 的 处 理 , 那 么 你 就 重 载 它 。

CO leDocument::OnUpdateEditChangeIcon

afx_msg void OnUpdateEditChangeIcon( CCmdUI* pCmdUI );

参 数

pCmdUI

指 向 一 个 代 表 产 生 更 新 命 令 的 菜 单 的 CCmdUI 结 构 的 指 针 。 更 新 处 理 者

说 明

框 架 调 用 这 个 函 数 来 更 新 Edit 菜 单 的 Change Icon 命 令 。 OnUpdateEditChange 基 于 在 文 档 中 是 否 存 在 一 个 有 效 的 图 标 来 更 新 命 令 的 用 户 界 面 。 重 载 这 个 函 数可 以 改 变 这 些 功 能 。

请 参 阅 C o leDocument::OnEditChangeIcon,CCmdUI

CO leDocument::OnUpdateEditLinksMenu

afx_msg void OnUpdateEditLinksMenu( CCmdUI* pCmdUI );

参 数

pCmdUI

通 过 pCmdUI 来 调 用 CCmdUI 结 构 的 Enable 成 员 函 数 来 更 新 用 户 界 面 。

说 明

框 架 调 用 这 个 函 数 来 更 新 Edit 菜 单 的 Change Icon 命 令 。从 文 档 中 的 第 一 个 OLE 项 开 始 , OnUpdateEditLinksMenu 访 问 每 一 项 , 测 试 它 们 是 否 是 一 个 链 接 , 并且 , 如 果 是 一 个 链 接 , 则 使 能 Links 命 令 。 重 载 这 个 函 数 可 以 改 变 这 种 情 况 。

请 参 阅 COleDocument::OnEditLinks, COleDocument::GetStartPosition , COleDocument::GetNextClientItem , CCmdUI

CO leDocument::OnUpdateObjectVerbMenu

afx_msg void OnUpdateOjectVerbMenu( CCmdUI* pCmdUI );

参 数

pCmdUI

指 向 一 个 代 表 产 生 更 新 命 令 的 菜 单 的 CCmdUI 结 构 的 指 针 。 更 新 处 理 程序 通 过 pCmdUI 来 调 用 CCmdUI 结 构 的 Enable 成 员 函 数 来 更 新 用 户 界 面 。

说 明

框 架 调 用 这 个 函 数 来 更 新 Edit 菜 单 的 ObjectName 命 令 以 及 从 ObjectName 命令访 问 的 Verb 子 菜 单 , 在 此 , ObjectName 是 文 档 中 嵌 入 OLE 对 象 的 名 字 。OnUpdateObjectVerbMenu 基 于 文 档 中 是 否 存 在 一 个 有 效 的 对 象 来 更 新ObjectName 命 令 的 用 户 界 面 。如 果 一 个 对 象 存 在 ,则 Edit 菜 单 中 的 ObjectName 命 令 是 有 效 的 。 当 选 择 了 这 个 菜 单 命 令 时 , Verb 子 菜 单 就 被 显 示 出 来 了 。 Verb 子 菜 单 包 含 了 所 有 对 这 个 对 象 来 说 可 以 使 用 的 动 词 命 令 ,比 如 说 Edit ,Properties

请 参 阅 COleDocument::OnEditConvert, CCmdUI

CO leDocument::OnUpdatePasteLinkMenu

afx_msg void OnUpdatePasteLinkMenu( CCmdUI* pCmdUI );

参 数

pCmdUI

指 向 一 个 代 表 产 生 更 新 命 令 的 菜 单 的 CCmdUI 结 构 的 指 针 。 更 新 处 理 者通 过 pCmdUI 来 调 用 CCmdUI 结 构 的 Enable 成 员 函 数 来 更 新 用 户 界 面 。

说 明

框 架 调 用 这 个 函 数 来 确 定 是 否 能 够 从 剪 贴 板 粘 贴 一 个 链 接 的 OLE 项 。 Paste

请 参 阅 COleDocument::OnUpdatePasteMenu, CCmdUI

CO leDocument::OnUpdatePasteMenu

afx_msg void OnUpdatePasteMenu( CCmdUI* pCmdUI );

参 数

pCmdUI

指 向 一 个 代 表 产 生 更 新 命 令 的 菜 单 的 CCmdUI 结 构 的 指 针 。 更 新 处 理 者通 过 pCmdUI 来 调 用 CCmdUI 结 构 的 Enable 成 员 函 数 来 更 新 用 户 界 面 。

说 明

框 架 调 用 这 个 函 数 来 确 定 是 否 能 够 从 剪 贴 板 粘 贴 一 个 链 接 的 OLE 项 。 Paste 菜

请 参 阅 COleDocument::OnUpdatePasteLinkMenu, CCmdUI

CO leDocument::RemoveItem

virtual void RemoveItem( CDocItem* pItem );

参 数

pItem

指 向 被 移 动 的 文 档 项 的 指 针 。

说 明

调 用 这 个 函 数 可 以 从 文 档 中 删 除 一 个 项 。 通 常 你 不 用 显 式 地 调 用 这 个 函 数 ; 它由 COleClientItem 和 COleServerItem 的 析 构 函 数 调 用 。

CO leDocument::UpdateModifiedFlag

void UpdateModifiedFlag();

说 明

如 果 文 档 中 包 含 的 OLE 项 被 修 改 了 , 调 用 这 个 函 数 可 以 将 文 档 标 记 为 被 修 改的 。 这 就 使 得 框 架 在 文 档 关 闭 前 提 示 用 户 保 存 文 档 , 即 使 就 是 在 文 档 的 内 部 数据 没 有 改 变 时 也 可 以 这 样 。

请 参 阅 CDocument::SetModifiedFlag, COleClientItem::IsModified