首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在主chm文件窗口中的合并chm文件中打开主题

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

Stack Overflow用户
提问于 2015-05-25 10:52:50
回答 1查看 745关注 0票数 2

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

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

代码语言:javascript
复制
[ALIAS]
  IDH_operation_geometry=operation\ACORD_geometry.chm:\HID_geometrytab_functions.htm

[MAP]
  #define IDH_operation_geometry    9001

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

代码语言:javascript
复制
HtmlHelp(Application.Handle, '.\help\3DFEMGeo.chm', HH_HELP_CONTEXT, 9001);

请教我如何在分题中打开话题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-25 16:08:28

通过合并多个帮助项目的索引和TOCs,创建模块化的帮助系统有一定的好处,但有时克服困难是很困难的。几年前,肖恩·斯塔格( Stagmer )发布了以下部分说明。有关上下文敏感的帮助,请参见底部的内容和链接:

context-id.htm

长话短说(HTH -请试着满足您的需要和环境):

代码语言:javascript
复制
// *** 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编译器(hhw.exe)的IDE前端。RoboHelp的老版本的设计者在区分构建HTML编译的帮助文件的技术方面做得很好,但如果直接使用底层工具,则忽略了一些可用的功能。特别是模块化的帮助。我假设,大多数研究此主题的人都了解了如何将以下内容添加到帮助项目文件( .hhp)中,以便开始设计模块化的HTML系统:

代码语言:javascript
复制
// *** BEGIN CODE SNIPPET
[MERGE FILES]
SubHelpSubject1.chm
SubHelpSubject2.chm
...
// *** END CODE SNIPPET

现在,在模块化设计中处理上下文敏感的帮助和合并文件这一主题增加了一个新的转折:如何将主题ID映射到适当的合并HTML文件?由于是模块化的,主题ID不是在主/主机帮助文件中,而是通过合并的子帮助项目的.chm文件集成到其中。这是通过将以下代码放置在主/主机主机的TOC文件中来实现的:

代码语言:javascript
复制
// *** 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

通过这两个添加(合并文件语句和TOC文件的添加),正确解析主题id到它们的帮助主题信息是完全的,除了您注意到HTML帮助窗口只显示它映射到的子帮助项目的TOC!主人/主人的TOC根本没有出现。怎么回事?

答案在于主/主机项目的别名文件。作为一个优秀的HTML帮助内容开发人员,您知道通过修改简单的别名语法,将感兴趣的主题id映射到适当的子帮助文件:

代码语言:javascript
复制
// *** BEGIN CODE SNIPPET
...
HID_TOPIC_ID1=Topic_1.htm
HID_TOPIC_ID2=Topic_2.htm
...
// *** END CODE SNIPPET

...to这个:

代码语言:javascript
复制
// *** 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-it:’的东西非常类似于'http:‘或'ftp:’你在网络浏览器中键入的文本:它被称为Microsoft的异步可插拔协议。它的'::/‘部分是一个引用;在C++术语中是一种“间接级”或“引用别名”。因此,要解决将上下文敏感的帮助主题映射到正确的帮助主题html文本并保持TOC与主服务器同步的问题,必须添加额外的间接级别以使其工作,如下所示:

代码语言:javascript
复制
// *** 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++类中的功能:

代码语言:javascript
复制
Result = BaseClass::SubClass1::Subclass2::DoFunctionCall();

顺便提一句,这个语法正在被XML替换,它将引用集合文件(.col)中指定的“collection”,其中包含XML条目。与别名文件中类似PERL的语法相比,阅读和跟踪要容易得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30436668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档