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

时间:2015-05-25 10:52:50

标签: chm html-help

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

以下是主chm项目中的头文件.And operation \ ACORD_geometry.chm是合并的chm文件。现在我使用的是Adobe robohelp。

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

[MAP]
  #define IDH_operation_geometry    9001

我按照以下方式调用htmlhelp函数。但这个话题并不开放。 。\ help \ 3DFEMGeo.chm是主要的chm文件。

HtmlHelp(Application.Handle, '.\help\3DFEMGeo.chm', HH_HELP_CONTEXT, 9001);

请教我在sub chm中打开主题的方法。

1 个答案:

答案 0 :(得分:3)

通过合并多个帮助项目的索引和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' s)是使用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文件集成到主文件/主机帮助文件中。这是通过将以下代码放在master / host master的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!主/主机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

那个小小的&#39; ms-its:&#39;事情非常像&#39; http:&#39;或者&#39; ftp:&#39;您在Web浏览器中键入的文本:它被称为Microsoft的异步可插入协议。 &#39; :: /&#39;它的一部分是参考;一种间接的“水平”。或者&#39;引用别名&#39;用C ++的说法。因此,要解决将上下文相关的帮助主题BOTH映射到正确的帮助主题html文本并使TOC与主服务器保持同步的问题,您必须添加一个额外的间接级别以使其工作,如下所示: / p>

// *** 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

这可以理解为:&#34;当显示帮助主题HID_TOPIC_ID1信息时,打开Master.chm,然后导航到SubHelpSubject1.chm的HTML文件Topic_1.htm,然后向下移动页面书签Topic1。&#34;

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

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

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

作为旁注,这个语法正在被XML取代 - HTML帮助将引用一个&#39; Collection&#39;在集合文件(.col)中指定,其中包含XML条目。比别名文件中的类似于PERL的语法更容易阅读和遵循。