基于html的chm在线帮助设计与实现
倪伟、张粤
文摘 本文以扬子石化码头生产管理系统为背景,介绍了在windows95、98环境下基于html的chm在线帮助(online help)技术的设计与实现。
关键词 管理系统,在线帮助,设计与实现
一、 引言
随着计算机的日益普及,各种计算机应用软件也相继出现,编制内容丰富、界面友好的应用软件在线帮助已成为广大软件编程人员亟待解决的问题。随着微软公司windows98的发行,基于html的新颖帮助文件(.chm文件)也相继面世,它与windows95环境下基于winhelp系统的帮助文件相比有如下几个特点:
1.chm文件使用网页浏览器explorer显示帮助内容,因此它能跨平台运行而无需重新编制chm文件,并支持html、activex、java、java脚本、vb脚本及html图像格式(.jpeg、gif、png)。
2.典型的html帮助文件窗口类似于windows98资源管理器,它克服了winhelp系统帮助文件目录窗口和主题窗口不能同时显示的缺点。
3.利用url地址可与因特网联系在一起,这样,使chm文件不再局限于已包装好的内容。
鉴于上述特点,开发基于html的chm在线帮助已成为必然趋势。本文结合扬子石化码头生产管理系统在线帮助的设计与开发,介绍在windows95、98环境下基于html的chm在线帮助的设计与实现。
二、 在线帮助的设计
应用软件在线帮助旨在帮助用户通过搜索或点击帮助界面,立即获取系统的描述、功能注解、使用方法等帮助信息。本节结合微软公司的htmlhelp workshop工具包,以扬子石化码头生产管理系统在线帮助设计为例,介绍基于html的chm在线帮助的设计。
1.主题的确定(.htm)
在确定主题时,首先应从程序模块化分析入手,将系统的整体结构分解成如图1所示的层次型模块结构,在各模块功能确定的前提下,应将功能相同的主题合为一个主题。其次,应确保主题的唯一性、完整性及层次性。它的每个主题对应一个html文件,可以用任何一个html编辑器进行编辑,如果不熟悉html文件的编辑,也可用word97进行编辑并另存为html文件,但必须注意,所有html文件都必须用网页浏览器检查确认无误。
2.创建目录文件(.hhc)
利用htmlhelp workshop工具包提供的帮助编辑器hhw.exe建立扩展名为hhc的目录文件,hhc文件类似于书的目录,它定义了各章节的层次关系及章节的标题,每个标题又分别与html主题文件或url地址相对应,作为标题的说明内容。在本次设计中,根据图1所示的系统层次结构所设计出的目录文件如图2所示(图中仅展示了数据编辑部分的层次关系)。
创建目录文件是制作chm文件最关键的工作,目录文件应该包含chm文件所有主题,章节的标题要按照制作的内容统一考虑,可以不添加,也可放置需要的主题文件,但要避免章节的标题与对应的主题不一致的情况出现。
3.创建索引文件(.hhk)
利用htmlhelp workshop工具包提供的帮助编辑器hhw.exe建立扩展名为hhk的索引文件,索引文件(.hhk)是一个html文件,它包含若干个关键字(所谓关键字是用户可能用到的并与一个或多个帮助主题文件关联在一起的字、词或短语),当用户使用chm文件时,只需在索引标签中输入一个关键字,chm文件就自动显示与这个关键字有关的主题列表供用户选择,以便用户找到相关的主题。
4.创建项目文件(.hhp)
利用htmlhelp workshop工具包提供的帮助编辑器hhw.exe建立扩展名为hhp的项目文件。项目文件是标准的ascii字符文件,它的结构类似于win.ini及其它windows初始化文件的结构,在本次设计中,hhp项目文件由[options]、[windows]、[files]、[alias]、[map]及[text popups]选项组成,如图3所示。
其中,[options]、[windows]、[files]选项类似于winhelp系统的项目文件选项,两者的主要差别在于前者在[files]选项采用主题文件(htm),后者使用帮助文本(rtf)。除此之外,由于chm文件基于html的特点,在[options]选项必须为帮助文件指定缺省主题页,否则编译后的帮助文件在运行时将出错。
为了使在线帮助chm文件具有上下文敏感帮助的能力,即根据当前活跃的程序段显示该程序的帮助主题。我们在[map]选项的mthelp.h头文件中,用#define命令将指定的上下文字符串编号(如101)映射给相应地字符串标识符(id_mt04)。同时,在[alias]选项中为上述的每个字符串标识符指定相应地帮助主题文件,如图3中将字符串标识符id_mt04与主题文件mthelp04.htm相关联。
考虑到使在线帮助chm文件具有如microsoft word97工具栏tip类似的帮助,在[text popups]选项中,我们设计了一个自定义头文件mthelp1.h及与之相关的文本文件mthelp1.txt(示例如图4、5所示)。但需注意,mthelp1.txt中的弹出式文本的主题标识符必须是唯一的,并以idh_作前缀。这样,当用帮助编辑器编译生成chm文件时,htmlhelp workshop将自动检测项目文件中的弹出式主题是否已被连入chm文件。
5.创建帮助文件(.chm)
利用htmlhelp workshop工具包提供的帮助编辑器hhw.exe将包含主题文件(.htm)、目录文件(.hhc)、索引文件(.hhk)及其它资源文件的项目文件(.hhp)编译成帮助文件(.chm)。
三、 在线帮助的实现
在线帮助设计的目的是将在线帮助应用到自行开发的应用软件中,使用户在使用该软件时能获得最大的技术支持。现以开发工具microsoft visual foxpro5.0为例,简要介绍基于html的chm在线帮助的实现。为了叙述方便,假设应用软件在线帮助文件为mthelp.chm,位于c:/users目录,并以激活人工检尺录入窗体的在线帮助作为实例。
1.创建动态连接库fhtmldll
htmlhelp api提供了相应地api函数hwnd htmlhelp(hwnd hwndcaller,lpcstr pszfile,uint ucommand,dword dwdata)识别和使用chm文件,其中,hwndcaller表示调用该函数的窗口句柄,pszfile表示帮助文件名,ucommand表示帮助类型,dwdata表示与ucommand相匹配的附加参数。由于此函数并没集成在windows95、98的api中,因此,在windows95、98环境下欲实现chm在线帮助,必须编制相应地调用接口。
为了使vfp能识别和调用chm文件,我们设计了一个动态连接库fhtmldll.dll,它向外提供一个输出函数fhtmlhelp()以实现常用的四种帮助:hh_help_context(上下文敏感帮助)、hh_display_index(查找关键字)、hh_display_text_popup(弹出式帮助)、hh_display_topic(显示帮助主题)。在该文件中,包含了随帮助编辑器hhw.exe一起发行的声明htmlhelp()函数的头文件htmlhelp.h及输出函数库htmlhelp.lib。具体的fhtmldll.cpp源文件如图6所示。
2.chm在vfp中的实现
由于vfp具有面向对象及基于应用程序框架技术的特点,所有vfp的控件及其升级版均具备helpcontext功能,也就是说,应用程序开发人员只需将上下文字符串编号(如101)赋予控件helpcontextid属性,即可用f1键激活相应控件的上下文敏感帮助(如人工检尺录入帮助主题),若控件helpcontextid属性没被赋值,则激活与该控件父对象helpcontextid属性相对应的上下文敏感帮助。但遗憾的是helpcontext功能只能识别winhelp在线帮助,而无法识别chm在线帮助,在本次设计中,为了充分利用控件现有的helpcontext属性,我们遵循winhelp在线帮助系统的实现机理,在应用软件主文件中用on key label f1 do htmlhelphandle with 1,0语句截获vfp对f1键的响应控制权,允许用户通过f1键激活自定义的帮助处理过程htmlhelphandle以实现chm上下文敏感帮助。同理,当用户以其它方式提出帮助要求时,应用软件使用do htmlhelphandle with commandoptionid,dataid,语句以激活chm在线帮助,其中,commandoptionid的取值范围为1~3,相应地dataid可以是上下文字符串编号、弹出式文本的主题号、需查找的关键字。chm在线帮助处理过程htmlhelphandle如图7所示。
四、 结束语
本文结合扬子石化码头生产管理系统在线帮助的设计与开发,从应用角度介绍了在windows95、98环境下基于html的chm在线帮助的设计与实现。在线帮助技术的运用,无论对软件编程人员还是用户都是不同凡响的,随着计算机应用的不断深入,它将受到越来越多的开发者和使用者的重视。
基于html的chm在线帮助设计与实现
最新推荐文章于 2023-12-16 23:07:51 发布