王朝知道
分享
 
 
 

EnableShellOpen怎么用阿?

王朝知道·作者佚名  2009-12-13  
宽屏版  字体: |||超大  
 
分类: 教育/科学 >> 外语学习
 
参考答案:

1 . 在Visual Studio 中 打 开Scribble 工 程, 首 先 在 预 编 译 头 文 件Stdafx.h 中 添 加ActiveX 文 档 支 持 所 需 要 的 头 文 件:

#include < afxdocob.h >

---- 2 . 打 开 文 件Scribitm.h 和Scribitm.cpp, 把CScribbleItem 类 的 基 类 换 为CDocObjectServerItem, 对 这 两 文 件 进 行 全 程 替 换, 把COleServerItem 换 为CDocObjectServerItem 即 可。

---- 3 . 打 开 文 件IpFrame.h 和IpFrame.cpp, 把CInPlaceFrame 类 的 基 类 换 为COleDocIPFrameWnd, 对 这 两 文 件 进 行 全 程 替 换, 把COleIPFrameWnd 换 为COleDocIPFrameWnd 即 可。

---- 4 . 打 开 文 件Scribble.cpp, 在BOOL CScribbleApp::InitInstance() 函 数 中, 把 下 面 两 行:

EnableShellOpen();

RegisterShellFileTypes(TRUE);

---- 插 入 在 以 下 语 句:

m_pMainWnd- >DragAcceptFiles();

---- 之 后, 并 且 把 下 面 语 句:

m_server.UpdateRegistry(OAT_INPLACE_SERVER);

改 为:

m_server.UpdateRegistry(OAT_DOC_OBJECT_SERVER);

---- 5 . 在ScribDoc.h 文 件 的CScribbleDoc 类 中 加 入 以 下 成 员 函 数:

protected:

virtual CDocObjectServer* GetDocObjectServer

(LPOLEDOCUMENTSITE pDocSite)

{ return new CDocObjectServer(this, pDocSite); }

---- 经 过 上 述 步 骤 改 造 之 后, 重 新 编 译 连 接 得 到 的 程 序 支 持ActiveX 文 档 特 性, 我 们 可 以 运 行Scribble.exe 程 序, 保 存 一 个SCB 文 件(Scribb1.scb 文 件), 并 退 出Scribble.exe 程 序( 为 了 使 浏 览 器 能 识 别SCB 文 件, 必 须 先 单 独 运 行 一 次, 以 便 注 册 必 要 的 信 息); 然 后 在Internet Explorer 中 打 开Scribb1.scb, 则 可 以 得 到 图1 所 示 的 结 果。 如 果 把Scribble1.scb 放 到Web 服 务 器 上, 则 可 以 通 过HTTP 协 议 在 浏 览 器 中 打 开 远 程 的SCB 文 件。

图1 运行在浏览器中的Scribble程序

五、ActiveX 文 档 包 容 器 程 序 的 实 现

---- 我 们 再 来 看 看ActiveX 文 档 包 容 器( 客 户) 程 序 的 实 现 过 程。ActiveX 文 档 包 容 器 程 序 必 须 实 现4 个 接 口:IOleDocumentSite、IOleClientSite、IOleInPlaceSite 和IOleInPlaceFrame, 其 用 途 分 别 如 下:

---- 1 .IOleDocumentSite, 它 是ActiveX 文 档 包 容 器 专 用 的 接 口, 可 使ActiveX 文 档 对 象 直 接 被 包 容 器 程 序 激 活, 而 不 必 按 照 通 常 的 实 地(In-Place) 激 活 对 象 的 方 式 被 激 活。ActiveX 文 档 对 象 调 用IOleDocumentSite::ActiveMe 成 员 函 数 激 活 自 身, 而 不 再 调 用IOleObject::DoVerb 函 数。

---- 2 .IOleClientSite, 这 是OLE 复 合 文 档 技 术 使 用 的 接 口, 也 用 于ActiveX 文 档 技 术。ActiveX 文 档 包 容 器 程 序 实 现 该 接 口,ActiveX 文 档 对 象 通 过 该 接 口 获 取 它 的 显 示 状 态、 显 示 区 域 的 大 小 以 及 包 容 器 提 供 的 其 他 一 些 资 源 信 息。

---- 3 .IOleInPlaceSite, 这 是OLE 复 合 文 档 技 术 使 用 的 接 口, 也 用 于ActiveX 文 档 技 术。ActiveX 文 档 包 容 器 程 序 实 现 该 接 口,ActiveX 文 档 对 象 通 过 该 接 口 控 制 激 活 操 作, 在 进 行 界 面 整 合 操 作 前 给 包 容 器 发 出 通 知。

---- 4 .IOleInPlaceFrame, 它 控 制 包 容 器 应 用 程 序 的 主 框 架 窗 口, 包 括 插 入 菜 单 项 形 成 复 合 菜 单、 控 制 框 架 的 模 式 等。 服 务 程 序 通 过IOleInPlaceFrame 接 口 实 现 菜 单 的 合 并 以 及 一 些 界 面 状 态 的 控 制。

---- Microsoft Visual C++ 6.0 包 含 的MFC 库(6.0 版) 提 供 了 完 全 的ActiveX 文 档 包 容 器 和 服 务 程 序 的 支 持, 通 过AppWizard 可 快 速 生 成ActiveX 文 档 包 容 器 程 序 的 框 架 代 码, 框 架 程 序 包 含 了 所 有 这 些 接 口 的 实 现。MFC 库 实 现ActiveX 文 档 包 容 器 程 序 的 结 构 如 下:

---- 1 . 在CWinApp 的 派 生 类 即 应 用 类 中, 为 支 持OLE 进 行 初 始 化, 在InitInstance 成 员 函 数 中 调 用AfxOleInit(), 对OLE 系 统DLL 进 行 初 始 化。

---- 2 . 虽 然ActiveX 文 档 在 界 面 特 性 上 与 嵌 入 对 象 不 太 一 致, 但MFC 中 实 现 的ActiveX 文 档 对 象 完 全 从 嵌 入 对 象 继 承 过 来, 所 以 用 以 管 理ActiveX 文 档 对 象 的COleDocObjectItem 类 从COleClientItem( 管 理 嵌 入 对 象) 派 生。COleDocObjectItem 类 实 现 了 新 的 接 口IOleDocumentSite, 并 从COleClientItem 继 承 了 接 口 IOleClientSite 和IOleInPlaceSite 的 实 现, 接 口IOleInPlaceFrame 在COleDocObjectItem 的 内 嵌 成 员m_pInPlaceFrame 中 实 现。 因 此,ActiveX 文 档 所 要 求 的 几 个 接 口 均 在COleDocObjectItem 类 中 实 现 了, 而 其 他 的 类, 包 括CWinApp、CDocument 和CFrameWnd 的 派 生 类 不 必 为 支 持ActiveX 文 档 而 增 加 新 的 代 码。

---- 3 . 如 同 处 理 嵌 入 对 象 一 样, 在CView 派 生 类 也 需 要 增 加 一 些 管 理 操 作, 比 如, 创 建ActiveX 文 档、 激 活 对 象、 窗 口 大 小 调 整 等。 创 建 对 象 可 以 直 接 调 用COleClientItem::CreateFromFile、COleClientItem::CreateLinkFromFile 或 者COleClientItem::CreateNewItem 函 数。 在AppWizard 生 成 的 代 码 中, 通 过COleInsertDialog::CreateItem 函 数 创 建 文 档 对 象, 读 者 可 以 根 据 需 要 改 写 这 段 代 码。

---- 利 用Visual C++ 的AppWizard 生 成 包 容 器 工 程 时, 注 意 在Step 3 对 话 框 中, 选 中Active Document Container 选 项, 如 图2 所 示。 完 成 了AppWizard 的 所 有 步 骤 后, 我 们 就 得 到 了 一 个ActiveX 文 档 包 容 器 程 序 的 框 架, 它 可 以 通 过 对 话 框 插 入 任 何ActiveX 文 档, 运 行 结 果 如 图3 所 示, 我 们 可 以 在 框 架 代 码 的 基 础 上 进 行 改 写 或 者 增 加 新 的 代 码, 这 里 不 再 一 一 说 明。

图2 创建ActiveX文档包容器程序时AppWizard选项示意图

图3 VC新建的ActiveX文档包容器程序运行示意图

六、 结 束 语

---- 本 文 介 绍 了ActiveX 文 档 的 特 性 和 结 构, 并 简 单 描 述 了MFC 库 所 提 供 的 支 持, 通 过 例 子 说 明 了 实 现ActiveX 文 档 特 性 并 不 复 杂。 这 种 特 性 可 以 使 一 个 应 用 与Internet/Intranet 联 系 起 来, 也 从 另 一 方 面 为 浏 览 器 提 供 了 扩 展 功 能, 在Internet 网 络 不 断 发 展 的 今 天,ActiveX 文 档 特 性 为 我 们 的 应 用 走 进Internet/Intranet 提 供 了 捷 径。( 全 文 完)

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有