我想在主chm文件窗口中的合并chm文件中打开主题。我有主chm文件的申请帮助。所以这个主chm文件包括子chm文件。我想通过调用htmlhelp函数在主chm文件的窗口中打开sub (merged) chm文件中的主题。
以下是主chm project.And operation\ACORD_geometry.chm合并的chm文件中的头文件。现在我正在使用。
[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);请教我如何在分题中打开话题。
发布于 2015-05-25 16:08:28
通过合并多个帮助项目的索引和TOCs,创建模块化的帮助系统有一定的好处,但有时克服困难是很困难的。几年前,肖恩·斯塔格( Stagmer )发布了以下部分说明。有关上下文敏感的帮助,请参见底部的内容和链接:
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编译器(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通过这两个添加(合并文件语句和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...to这个:
// *** 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与主服务器同步的问题,必须添加额外的间接级别以使其工作,如下所示:
// *** 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替换,它将引用集合文件(.col)中指定的“collection”,其中包含XML条目。与别名文件中类似PERL的语法相比,阅读和跟踪要容易得多。
https://stackoverflow.com/questions/30436668
复制相似问题