分享
 
 
 

HTML Help 帮助与 MSDN 库集成指南

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

MSDN帮助集成指南

编译/NorthTibet

下载程序源代码

介绍

很早以前我就想过将一些常用的HTML Help帮助信息(也就是CHM文件)集成到MSDN库中,但一直都没有找到好的办法。有一天我偶然上了codejoke的网站,发现了它:MSDN

Integration,这不就是我梦寐以求的吗?真是梦里寻她千百度,蓦然回首她就在网络某一处 ......而且,更令人喜出往外的是这个实用程序还提供全部的源代码。我下载下来狂研究了一番后,发现它真是个不错的东东。遂将它整理出来以飨那些有同样需求的弟兄。

起步篇

大家知道,MSDN库中的信息都是用HTML Help文件以“集合(collection)”的形式组织起来的。一个集合便是一个XML格式化文件,它包含MSDN使用的帮助文件信息。集合使用的文件有两个,一个是msdnxxx.col,另一个是hhcolreg.dat。前者为实际的集合,包含集合使用的全部html文件清单。这个文件的名字一般都以“msdn”开始,后缀为“.col”。如2000年6月的信息集合文件名为msdn020.col。hhcolreg.dat文件是集合的注册文件。它存储有关每个集合的细节信息,如HTML

Help文件的位置以及索引文件和版本号标题。因此我们首先要找到这两个文件。

查找 msdnxxx.col 文件

如果你安装了MSDN库的话,用 regedit

实用程序就可以在系统注册表中查找到 msdnxxx.col

文件的位置,其注册表键值是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\HTML Help Collections\Developer Collections

这里是微软存储HTML Help帮助文件集合的位置。这个键值下会列出语言入口,它说明信息集合使用的是哪种语言。典型的值如0x0409表示英语,每种语言都用不同的值表示。下一个键值是你最想要的:即当前MSDN首选的集合是哪个。典型的值如:0x0393a0c80,这个值根据拟所安装的MSDN不同而不同。它下面有一项是Filename,它指定了msdnxxx.col文件在硬盘上的物理存放位置。

查找 hhcolreg.dat 文件

hhcolreg.dat文件与msdnxxx.col一样也是一个XML格式的文件,它包含集成帮助文件的特定信息。在老版本的MSDN库中,这个文件被放在

“Windows\Help”目录中。后来的版本把这个文件的存放位置移到了“\Documents and Settings\All Users\Application Data\Microsoft\HTML

Help\”目录。从5.0版本的shell32.dll开始,我们可以用CSIDL_COMMON_APPDATA标志调用GetSpecialFolderPath(...)API函数来获取这个文件的存放路径。但是IE后来的版本把这个函数移到了ShFolder.dll中。因此,我们创建了一个自己的版本来获取这个文件的存放路径,它就叫xtAfxGetSpecialFolderPath(...)。我们还能通过msdnxxx.col文件中的collectionnum标签来确定hhcolreg.dat文件的存放目录。典型地,如果这个值小于10000,则这个文件存放在“Windows/Help”目录。

编辑集合文件

现在,我们找到了hhcolreg.dat和msdnxxx.col两个文件,为了正确集成数据信息,接下来我们要编辑这两个文件。首先来看看msdnxxx.col,用文本编辑器打开这个文件。在前面的几行里你会发现有两个标签:masterlangid

和 collectionnum。这两个标签对我们要做的事情来说非常重要。masterlangid

告诉我们集合使用的是哪种语言,collectionnum

表示目前处理的是哪个集合。这两个标签典型的值为:

<masterlangid value=1033/>

<collectionnum value=10002/>

集合中的每一个入口都以<Folder>开始,以</Folder>结束。你要关心的值有三个。两个TitleString标签和一个LangId标签。第一个TitleString标签的值是启动MSDN库后,选中“目录”显示的内容。第二个TitleString的值是集合的标示符,这个值在集合中必须是唯一的,hhcolreg.dat文件中也要用到它。标签LangId的值就是masterlangid的值。

下面是典型的集合文件内容前几行例子:

<Folder>

<TitleString value="VC知识库"/>

<FolderOrder value=2/>

<Folder>

<TitleString value="=在线杂志"/>

<FolderOrder value=1/>

<LangId value=1033/>

</Folder>

</Folder>

编辑集合注册入口表文件

接下来我们要更新hhcolreg.dat文件。用文本编辑器打开这个文件。你会注意到每个入口都以<DocCompilation

标签开始,以</DocCompilation>结束。这里有六个标签是我们要关心的:

DocCompId标签的值与msdnxxx.col文件中第二个TitleString标签的值相同。这个值在集合中必须唯一且必须完全匹配!

DocCompLanguage标签的值与msdnxxx.col文件中LangId标签的值相同,它必须与masterlangid的值匹配。

ColNum标签是集合编号,它必须与msdnxxx.col文件中collectionnum

的值匹配。

TitleLocation 标签是*.chm 文件存放的全路经名。

IndexLocation 标签为*.chi 文件存放的全路经名。

最后一个是Version标签,用它指定集合信息的版本。

下面是一个典型的集合注册入口表:

<DocCompilation>

<DocCompId value="xtreme_toolkit"/>

<DocCompLanguage value=1033/>

<LocationHistory>

<ColNum value=10001/>

<TitleLocation value="[full path]Xtreme.chm"/>

<IndexLocation value="[full path]Xtreme.chi"/>

<LocationRef value=""/>

<Version value=2/>

</LocationHistory>

</DocCompilation>

大功告成

编译HTML Help文件时,你必须让编译器产生.chi索引和二进制的目录表,也就是toc.hhc文件。MSDN库需要用到这两个文件。为此,在.hhp工程文件的[OPTIONS]段里要加上“Create CHI

file=Yes”,“Binary TOC=Yes”选项。建议你将.chm文件和.chi文件放在MSDN库的集合目录中,但不一定非要这样做,放在其它地方,只要指定正确的路径也可以。编辑完集合文件之后,启动MSDN库,选中索引签产生帮助索引。此时会弹出一个对话框告诉你正在产生索引。

创建HTML Help的工具

在集成MSDN之前,你必须创建好CHM文件。使用微软提供的免费工具HTML Help Workshop可以很方便的产生HTML

Help文件。此外网上还有很多第三方开发的工具,不过都是要你掏银子购买的。

MSDN 帮助信息集成实用工具

如果你觉得自己是个懒人,本文将给你提供一个方便的实用工具,用它就可以轻松将你的HTML

Help文件集成到MSDN中。如图一所示。

图一 MSDN 帮助信息集成实用工具

你只要输入.chm和.chi文件的路径,提供一个集合信息标题串,定义一个帮助文件的唯一标示符。这个唯一标示符你可以自己取名定义,但最保险的方式是用GUID来保证它的唯一性,工具程序为你提供了一个按钮“Gen.GUID”来自动产生这个唯一标示。你还可以指定帮助文件的版本号,但此项不是必输项。最后按“集成到MSDN库”按钮。

实用工具的源代码可以从本文的开始处的链接下载,与集成有关的所有代码都封装在了CMSDNIntegration

类中,根据codejoke的许可协议,CMSDNIntegration类的源代码是免费使用的,因此你可以在自己的MFC程序中无限制地使用这个类来定制集成工具。在CMSDNIntegration的定义文件中还有一个代码中用到的辅助类CLoadLibrary,它实现了加载某个dll并获取版本号。详细的使用说明请参考完整的帮助文件。下图是我将《VC知识库在线杂志》第八期和第九期集成到MSDN库的情形。

图二 将《VC知识库在线杂志》集成到MSDN

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有