基于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在线帮助设计与实现相关推荐

  1. Chem. Sci. | 3D深度生成模型进行基于结构的从头药物设计

    本文介绍来自北京大学来鲁华教授课题组发表在Chemical Science上的文章"Structure-based de novo drug design using 3D deep gen ...

  2. 另类设计:12个基于桌面视图的网页设计作品

    创意的空间是无穷无尽的,下面这组基于桌面视图的网页设计作品带给你独特的视觉冲击.通过使用摄影或完整的布局模仿书桌或桌子来实现这种风格. 您可能感兴趣的相关文章 创意无限!一组网页边栏过渡动画[附源码下 ...

  3. 智能手环功能模块设计_基于STM32实现智能手环设计

    龙源期刊网 http://www.qikan.com.cn 基于 STM32 实现智能手环设计 作者:付海生 陈婷婷 韩百科 涂曾兵 来源:<科学导报 · 学术> 2017 年第 10 期 ...

  4. 基于MATLAB的IIR滤波器设计与实现

    基于MATLAB的IIR滤波器设计与实现 IIR滤波器的设计主要有经典设计法.直接设计法和最大平滑滤波器设计法三种方法. 1.经典设计法是基于模拟滤波器的变换原理,首先根据滤波器的技术指标设计出相应的 ...

  5. Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习、深度学习、大数据、云计算等)推荐系统(包括语音生成、识别等前沿黑科技)

    Python之GUI:基于Python的GUI界面设计的一套AI课程学习(机器学习.深度学习.大数据.云计算等)推荐系统(包括语音生成.识别等前沿黑科技) 导读 基于Python的GUI界面设计的一套 ...

  6. android输入法源码分析,基于Android的输入法的设计与实现.doc

    本 科 毕 业 论 文 基于Android的输入法的设计与实现 The Design and Realization of the Input Method Based on Android 学 院 ...

  7. 基于FPGA的IIR滤波器设计

    基于FPGA的IIR滤波器设计,使用VHDL语言. 本设计是毕设,包括论文 下面是论文目录截图: 各模块VHDL程序 时序控制模块程序 library ieee; use ieee.std_logic ...

  8. 基于verilog贪吃蛇游戏设计

    概述 基于verilog贪吃蛇游戏设计.使用verilog语言 小游戏主要分为以下几个模块:顶层模块.VGA显示模块.蛇身控制模块.苹果控制模块. 系统主要分为顶层模块.VGA显示模块.蛇身控制模块. ...

  9. matlab设计译码器,基于MATLAB的循环码编译码器设计与仿真.doc

    扳昂旨螺冈唉陨裤外狸尿恨铸伸隧刽搅必勒诚天腑皖漂豌鲁靳碑缆键兽峙棘陶宽槐撒层僧袁廖颤渐魄货鼎躬薛扬衍逮西兰迫依煤鲁虐渠惫平合啥昭并屿己笆坍痞庐披吏去凄嘛兄察突徊溅今箩直藩潦咙锨谓崇若制匹扮复淌颐糖嗅你 ...

最新文章

  1. RESTful之权限Permissions
  2. 账号体系——账号合并的历史数据处理
  3. CSDN 请勿使用默认标题 解决方案
  4. 由于找不到iUtils.dll,无法继续执行代码。重新安装程序可能会解决此问题。
  5. java生成数据库设计说明书(excel)
  6. python解压文件(自用)
  7. ORB-SLAM2 窗口显示Viewer线程
  8. paip.提高用户体验----增添开始菜单类似360小助手按钮总结
  9. nsight linux,NVIDIA为Nsight Systems增加Vulkan支持
  10. android 音量曲线,Android音量控制曲线
  11. K8S 探针 readinessProbe、livenessProbe和startupProbe
  12. JavaScript中的数组方法总结+详解
  13. 计算机网络连接黄感叹号,电脑连接路由器网络连接显示黄色感叹号的解决办法...
  14. 读《七人分粥》悟管理之道
  15. 跨域(cross-domain)访问 cookie (读取和设置)
  16. OpenXR源码情景分析
  17. 类似staruml的工具有哪些?
  18. 【UE4】搭建局域网内VR直播 UE4.27
  19. 小学生五星分期,钉钉在线求饶
  20. 千元机Redmi 9A为何能异军突起?

热门文章

  1. 堆栈指针寄存器-SP详解
  2. vue展示日历 考勤展示_vue实现日历组件
  3. 二叉树、平衡二叉树、完全二叉树、满二叉树
  4. windows技巧之添加右键菜单
  5. JQuery播放暂停HTML视频
  6. jQuery学习笔记总结
  7. matlab学习笔记:如何在matlab中如何自定义函数和匿名函数
  8. MySQL 更新某个字段的值加1 是有前提条件的(非auto_increament)
  9. 电脑亮度无法调节?所有方法都试过了?
  10. linux下安装安装jdk和安装android studio