通过合并多个帮助项目的索引和目录来创建模块化帮助系统有一些好处,但有时克服障碍很困难。以下说明的某些部分是 Sean Stagmer 多年前发布的。有关上下文相关的帮助,另请参阅底部的内容和链接:
http://www.help-info.de/en/Help_Info_HTMLHelp/hh_context-id.htm http://www.help-info.de/en/Help_Info_HTMLHelp/hh_context-id.htm
长话短说(HTH - 请根据您的需求和环境尝试):
// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1="ms-its:Master.chm::/SubHelpSubject1.chm::/Topic_1.htm#Topic1"
HID_TOPIC_ID2="ms-its:Master.chm::/SubHelpSubject2.chm::/Topic_2.htm#Topic2"
...
// *** END CODE SNIPPET
还有故事长版:
RoboHelp 例如和许多其他帮助创作工具 (HAT) 都是利用 Microsoft HTML 帮助编译器 (hhw.exe) 的 IDE 前端。 RoboHelp 旧版本的设计者在分离构建 HTML 编译帮助文件的技术方面做得非常好,但遗漏了直接使用底层工具时可用的几个功能。
具体来说,是模块化帮助。我假设大多数研究此主题的人都了解了如何将以下内容添加到他们的帮助项目文件(.hhp)中以开始设计模块化 HTML 帮助系统:
// *** BEGIN CODE SNIPPET
[MERGE FILES]
SubHelpSubject1.chm
SubHelpSubject2.chm
...
// *** END CODE SNIPPET
现在,在模块化设计中解决上下文相关帮助和合并文件的问题增加了一个新的转折:如何将主题 ID 映射到适当的合并 HTML 文件?由于是模块化的,主题 ID 不在主/主机帮助文件中,而是通过合并的子帮助项目的 .chm 文件集成到其中。这是通过将以下代码放置在主控/主机主控的 TOC 文件中来完成的:
// *** BEGIN CODE SNIPPET
...
<LI>
<OBJECT type="text/sitemap">
<param name="Name" value="SubHelpSubject1">
</OBJECT>
<OBJECT type="text/sitemap">
<param name="Merge" value="SubHelpSubject1.chm::\SubHelpSubject1.hhc">
</OBJECT>
<LI>
<OBJECT type="text/sitemap">
<param name="Name" value="SubHelpSubject2">
</OBJECT>
<OBJECT type="text/sitemap">
<param name="Merge" value="SubHelpSubject2.chm::\SubHelpSubject2.hhc">
</OBJECT>
...
// *** END CODE SNIPPET
通过这两个添加(MERGE FILES 语句和 TOC 文件的添加),主题 ID 到其帮助主题信息的正确解析已完成,除非您注意到 HTML 帮助窗口仅显示子帮助项目的 TOC它映射到!主/主机目录根本不显示。是什么赋予了?
答案在于主/宿主项目的别名文件。作为一名优秀的 HTML 帮助内容开发人员,您知道通过修改简单的别名语法将感兴趣的主题 ID 映射到适当的子帮助文件,如下所示:
// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1=Topic_1.htm
HID_TOPIC_ID2=Topic_2.htm
...
// *** END CODE SNIPPET
...对此:
// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1="ms-its:SubHelpSubject1.chm::/Topic_1.htm#Topic1"
HID_TOPIC_ID2="ms-its:SubHelpSubject2.chm::/Topic_2.htm#Topic2"
...
// *** END CODE SNIPPET
这个小小的“ms-its:”非常类似于您在网络浏览器中输入的“http:”或“ftp:”文本:它被称为 Microsoft 的异步可插拔协议。它的 '::/' 部分是一个引用; C++ 术语中的一种“间接级别”或“引用别名”。因此,为了解决上下文相关帮助主题既映射到正确的帮助主题 html 文本又保持 TOC 与主文档同步的问题,您必须添加额外的间接级别才能使其正常工作,如下所示:
// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1="ms-its:Master.chm::/SubHelpSubject1.chm::/Topic_1.htm#Topic1"
HID_TOPIC_ID2="ms-its:Master.chm::/SubHelpSubject2.chm::/Topic_2.htm#Topic2"
...
// *** END CODE SNIPPET
这可以理解为:“显示帮助主题 HID_TOPIC_ID1 信息时,打开 Master.chm,然后导航到 SubHelpSubject1.chm 的 HTML 文件 Topic_1.htm,然后向下移动页面到书签 Topic1。”
万岁!您的主题会弹出,主目录/主机目录也可见!
就像用 C++ 术语思考一样,别名文件看起来非常像我们在 C++ 类中引用功能的方式:
Result = BaseClass::SubClass1::Subclass2::DoFunctionCall();
附带说明一下,此语法正在被 XML 取代 - HTML 帮助将引用集合文件 (.col) 中指定的“集合”,其中包含 XML 条目。比别名文件中类似 PERL 的钝语法更容易阅读和遵循。