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

问题描述 投票:2回答:1

我想在主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中打开主题的方法。

chm html-help
1个回答
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)是使用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

那个小'ms-its:'的东西非常类似于你在Web浏览器中输入的'http:'或'ftp:'文本:它被称为Microsoft的异步可插拔协议。它的':: /'部分是一个参考; C ++用语中的一种“间接级别”或“引用别名”。因此,要解决将上下文相关的帮助主题BOTH映射到正确的帮助主题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。”

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.