2015-05-25 66 views
1

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

以下是主chm项目中的头文件。操作\ 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中打开主题。

回答

2

通过合并多个帮助项目的索引和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 eg和许多其他帮助创作工具(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文件集成到主文件中。这是通过将以下代码在主/主主的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!主/主目录完全不显示。是什么赋予了?

答案在于主/主项目的别名文件。作为一个好一点的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-其:”事情是非常像的“http:”或“FTP:”文本键入到Web浏览器:它被称为来自微软的异步可插入协议。它的':: /'部分是一个参考;用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。 “

Hooray!您的主题弹出,并且主/主目录也可见!

喜欢思考在C++方面的别名文件看起来很像我们如何会在C基准功能++类:

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

作为一个侧面说明,这种语法是由XML取代 - HTML帮助将参考集合文件(.col)中指定的'集合',其中包含XML条目。比别名文件中类似于PERL的语法更容易阅读和遵循。

+0

我很抱歉迟到的回应。并感谢您的可变信息。 – F8Kuniie