分享
 
 
 

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 提 供 了 捷 径。( 全 文 完)

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有