在主 chm 文件中的合并 chm 文件中打开主题 window

open topic in merged chm file in master chm file window

我想在主 chm 文件 windows 中打开合并的 chm 文件中的主题。 我有应用程序帮助的主要 chm 文件。所以这个主 chm 文件包含子 chm 文件。我想通过调用 htmlhelp 函数在主 chm 文件的 window 中打开子(合并)chm 文件中的主题。

以下是主chm中的头文件project.And operation\ACORD_geometry.chm是合并后的chm文件。现在我正在使用 Adob​​e robohelp。

[ALIAS]
  IDH_operation_geometry=operation\ACORD_geometry.chm:\HID_geometrytab_functions.htm

[MAP]
  #define IDH_operation_geometry    9001

然后我通过以下方式调用htmlhelp函数。但是话题打不开。 .\helpDFEMGeo.chm 是主 chm 文件。

HtmlHelp(Application.Handle, '.\helpDFEMGeo.chm', HH_HELP_CONTEXT, 9001);

请教我如何在子chm中打开主题。

通过合并多个帮助项目的索引和 TOC,创建模块化帮助系统有一些好处,但有时很难克服困难。以下说明的某些部分是 Sean Stagmer 多年前发布的。对于上下文相关的帮助,另请参阅底部的内容和链接:

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 不在 master/host 帮助文件中,而是通过合并的子帮助项目的 .chm 文件集成到其中。这是通过在 master/host master 的目录文件中放置以下代码来完成的:

// *** 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 帮助 window 只显示它映射到的子帮助项目的目录! master/host TOC 根本没有出现。给出了什么?

答案就在 master/host 项目的别名文件中。作为一个不错的 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:' 小东西非常像您在 Web 浏览器中键入的 'http:' 或 'ftp:' 文本:它被称为 Microsoft 的异步可插入协议。它的'::/'部分是一个参考;用 C++ 的说法是一种 'level of indirection' 或 'reference alias'。因此,要解决上下文相关的帮助主题同时映射到正确的帮助主题 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

这可以理解为:"When displaying the help topic HID_TOPIC_ID1 information, open Master.chm, then navigate to SubHelpSubject1.chm's HTML file Topic_1.htm, then move down the page to the bookmark Topic1."

万岁!您的主题弹出,master/host TOC 也可见!

就像用 C++ 术语思考一样,别名文件看起来非常像我们在 C++ 中引用功能的方式 class:

Result = BaseClass::SubClass1::Subclass2::DoFunctionCall();

作为旁注,此语法正在被 XML 替换 - HTML 帮助将引用集合文件 (.col) 中指定的 'Collection',其中具有 XML里面的条目。比别名文件中类似 PERL 的钝语法更容易阅读和遵循。