CHM帮助文件在VB程序中的应用
――HTML Help Workshop
作 者:叶帆(http://blog.csdn.net/yefanqiu)
一.工欲利其事,必先利其器――CHM制作之工具
1. 首推微软门下的专门工具HTML Help Workshop,它是制作chm帮助文件最权威、功能最全的工具(但不是最快的工具),下载地址:
http://down1.tech.sina.com.cn/download/downContent/2004-03-16/7463.shtml
2. PowerCHM等一些快速制作chm的帮助文件的程序也是很好的选择,配合HTML Help Workshop的使用,更是如虎添翼。
3. HTML Help Workshop一些汉化软件使用起来,好像有些问题,所以还是推荐使用英文原版。
二.寻根探源――CHM源文件之组成
1. 项目文件(.hhp):类似VB程序中的vbp文件,其内容格式类似ini文件,主要包括如下几部分:
a). [OPTIONS] 基本参数设置:
Compiled file=YFHelp.chm //编译后的chm文件名
Contents file=YFHelp.hhc //目录文件名
Index file=YFHelp.hhk //索引文件名
Title=叶帆帮助 //chm窗口标题
Default Window=main //主窗口,与[WINDOWS]字段下的窗体对应
b). [WINDOWS] 帮助窗口设置:
main="叶帆帮助","YFHelp.hhc","YFHelp.hhk","HTML/YF1.htm","Html/YF1.htm",,,,,0x20,180,0x104E,[100,100,900,700],,,,0,0,0,0
主要包括如下内容:窗口名称、目录文件、索引文件、默认主页、首先页、窗口大小和初始位置。
c). [FILES] 帮助组成文件:
HTML/YF1.htm //针对hhp文件存放位置的相对路径
HTML/YF2.htm
HTML/YF3.htm
d). [TEXT POPUPS] popup弹出帮助的源文件设置:
YFPopups.txt // popup弹出帮助的源文件路径
e). [MAP]映射文件设置:
#include YFheader.h //类似C语言的头文件,主要是一些常数的宏定义
f). [ALIAS] 别名设置:
IDH_HELP1=Html/YF1.htm // IDH_HELP1在YFheader.h有定义
IDH_HELP2=Html/YF2.htm // IDH_HELP2在YFheader.h有定义
IDH_HELP3=Html/YF3.htm // IDH_HELP3在YFheader.h有定义
2.目录文件(.hhc)
该文件定义chm文件的树型目录,类似网页文件,格式如下:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft® HTML Help Workshop 4.1">
<!-- Sitemap 1.0 -->
</HEAD>
<BODY>
<OBJECT type="text/site properties">
<param name="Window Styles" value="0x10">
</OBJECT>
<UL> ? LI/UL控制树的层次
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="首页"> ? 目录树的选项名
<param name="Local" value="HTML/YF1.htm"> ? 链接的文件名
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="叶帆帮助">
</OBJECT>
<UL>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="第一个帮助选项">
<param name="Local" value="HTML/YF2.htm">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="第二个帮助选项">
<param name="Local" value="HTML/YF3.htm">
</OBJECT>
</UL>
</UL>
</BODY>
</HTML>
3.索引文件(.hhk)
chm帮助文件,索引选项中索引字段的设定,格式与hhc文件类似。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
<HEAD>
<meta name="GENERATOR" content="Microsoft® HTML Help Workshop 4.1">
<!-- Sitemap 1.0 -->
</HEAD>
<BODY>
<UL> ? LI/UL控制树的层次
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="首页"> ? 索引名
<param name="Local" value="HTML/YF1.htm"> ? 链接的文件名
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="第一个帮助选项">
<param name="Local" value="HTML/YF2.htm">
</OBJECT>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="第二个帮助选项">
<param name="Local" value="HTML/YF3.htm">
</OBJECT>
</UL>
</BODY>
</HTML>
4.头文件(.h)
给C语言的头文件别无二致,主要包含一些常数的宏定义
#define IDH_HELP1 1001 ? 对应VB控件的HelpContextID属性
#define IDH_HELP2 1002
#define IDH_HELP3 1003
5.popup文件(.txt)
这是一个很有用的文件,popup帮助弹出的内容就在这里定义,对这个文件同样可以包含一个头文件(.h),它包含常数的宏定义,这样在txt文件中就可以写宏变量了,不过我还是直接建议写相应常数。
.topic 30001 ? 对应VB控件的WhatsThisHelpID属性
哈哈,这是第一条Popup帮助,叶帆的Blog:http://blog.csdn.net/yefanqiu
.topic 30002
哈哈,这是第二条Popup帮助,叶帆的软件:API浏览器、VB源码之友...
.topic 30003
哈哈,这是第三条Popup帮助,叶帆开源:XP窗体界面、串口通信示例...
.topic 30004
哈哈,这是第四条Popup帮助,叶帆的开发团队:Sky Walker(天行者)
三.循序渐进――CHM源文件之制作
头文件、popup文件、索引文件就不用介绍怎么制作了(搞开发的,大家都是聪明人),主要介绍hhp和hhc文件的制作。(此外用到的一些网页文件,请用FrontPage或其它工具软件制作,这里不作介绍)。
1.目录文件(.hhc)的制作
首先先用工具软件做好相关的网页(比如我做了三个简单的网页:YF1.htm、YF2.htm、YF3.htm),然后打开HTML Help Workshop,选择“File”菜单中的“New”选项,在对话框中选择“Table of Contents”(如图1),按“OK”按钮开始新建目录文件。
然后在hhc编辑窗口,添加上已做好的三个网页YF1.htm、YF2.htm、YF3.htm,并添加所需的目录,并调整好相应的目录树型结构,如图2所示:
最后按保存,完成hhc文件的编制。
2.项目文件(.hhp)的制作
第一步:选择“File”菜单中的“New”选项,在对话框中选择“Project”(如图3),按“OK”按钮开始新建项目文件。
第二步:输入hhp文件的路径和文件名(如图4)。
第三步:选择工程文件包含的选项(如图5)。
第四步:添加刚才生成的目录hhc文件(如图6)。
第五步:添加索引hhk文件(如图7)。
第六步:确认完毕后,进入主编辑界面,单击工具条上的添加窗口按钮,添加主窗口(如图8)。
第七步:设置主窗口的标题(如图9)。
第八步:设置初始窗口位置和大小(如图10),其它选项请根据需要,自行设定。
第九步:添加主体文件(如图11)。
第十步:添加接口信息,把头文件、别名信息、Popup文件分别添加(如图12)。
第十一步:最关键一步,单击编译,生成CHM文件,这是编译后的结果,如图13所示:
四.牛刀小试――CHM文件在VB中的应用
1.在VB中新建两个窗体,测试上下文帮助的窗体命名为frmContextTest,测试弹出式帮助的窗体命名为frmPopuTest。
2.设置窗体必要的属性及添加必要代码
a). frmContextTest窗体
WhatsThisButton = False <--要在属性框才能设置成功
WhatsThisHelp = False <--要在属性框才能设置成功
窗体上添加三个控件:text1、List1、Check1,分别设置属性HelpContextID的值为1001、1002、1003(要和头文件中的宏定义一致)。
添加如下代码:
Option Explicit
'测试弹出式帮助
Private Sub Command2_Click()
frmPopupTest.Show
End Sub
'功能描述:在窗体激活事件里设置帮助
Private Sub Form_Activate()
App.HelpFile = App.Path & "/YFHelp.chm"
End Sub
b). frmPopuTest窗体
WhatsThisButton =True <--要在属性框才能设置成功
WhatsThisHelp = True <--要在属性框才能设置成功
窗体上添加六个控件:text1、text2、Combo1、Command1、Label1、Label2,对前四个控件,分别设置属性HelpContextID的值为30001、30002、30003、3004(要和popup文件中的索引号一致)
添加如下代码:
Option Explicit
'在激活事件里,设置帮助文件
Private Sub Form_Activate()
App.HelpFile = App.Path & "/YFhelp.chm::YFpopups.txt"
End Sub
‘初始化
Private Sub Form_Load()
Text2.FontSize = 1
Text2.Width = 1
Text2.Height = 1
End Sub
'单击弹出帮助信息
Private Sub Label2_Click()
Text2.SetFocus
SendKeys "{F1}"
End Sub
3.运行VB,测试一下我们的劳动成果
a).上下文帮助测试(如图14)
b).弹出式帮助测试(如图15)
在Windows XP / VB 6.0环境下测试成功。
源代码下载地址:http://www.bjjr.com.cn/YeFan/SourceCode/yfchmvb.rar