如何用 Win32 SDK 编程创建 Tri-pane HTML Help 窗口

2016-02-19 18:52 24 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的如何用 Win32 SDK 编程创建 Tri-pane HTML Help 窗口,希望大家看完后能赶快学习起来。

【 tulaoshi.com - Web开发 】

  HTML Help 使用户能在一个帮助窗口中使用工具棒、查看目录和帮助主题。目前,有两种方法创建 Tri-pane 类型的 HTML Help 窗口:

使用 HTML Help Workshop 创建窗口
使用 HTML Help API 编程创建窗口
  本文将介绍如何使用这两种方法创建Tri-pane HTML Help 窗口。

  使用预定义窗口

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  在 HTML Help Workshop环境中很容易创建和修改工程的窗口定义,有关窗口定义的其它信息,请参考微软知识库文章:Q189084 HOWTO: Create a Tri-pane Window with HTML Help Workshop

  本文假设在你的应用程序开发工具为 Visual C++,那么要在自己的程序中使用HTML Help帮助,必须借助于HTML Help提供的 API 函数;要调用这些 API 函数,就必须包含 htmlhelp.h 文件,并且将库文件 hhctrl.lib 或者 htmlhelp.lib 链接到自己的程序代码中。只要你安装了HTML Help Workshop环境,这些文件存放在 HTML Help Workshop下的 Include 和 Lib 目录中。

  在下面的示范代码中,sample.chm是一个编译好的HTML Help帮助文件,其中有一个叫“ mywindow”的窗口定义,下面的代码示范了如何在一个 MFC 程序中调用 HTML Help API函数:

// CMainFrame message handler
  void CMainFrame::OnHelp()
  {
   // display the topic "intro.htm" in the window defined
   // in the HTML Help Workshop
   HtmlHelp(m_hWnd,"sample.chm::intro.htmmywindow",
     HH_DISPLAY_TOPIC,0);
  }   
  使用 HTML Help API

  为了创建 three-pane 窗口, 必须首先创建和填写HH_WINTYPE结构。 HH_WINTYPE结构在HtmlHelp.h中定义,详细说明参见HTML Help Workshop文档。 以下是一个例子:

Sample Code
  ///////////////////////////////////////////
  // Create an HH_WINTYPE structure.
  {
    HH_WINTYPE m_hhWinType;
    // Initialize all structure members to zero.
    ZeroMemory(&m_hhWinType, sizeof(HH_WINTYPE));
    // Define a custom message for use with idNotify.
    // You are responsible for ensuring that this ID
    // does not conflict with other Windows/MFC messages.
    #define IDD_HELPTAB 69999
    // Set the size of the structure.
    m_hhWinType.cbStruct = sizeof(HH_WINTYPE);
    // Set up the properties of the HTML window:
    // tripane window, sync topic with index/TOC, and so forth.
    // NOTE: fsValidMembers - HHWIN_PARAM_PROPERTIES must be set.
    m_hhWinType.fsWinProperties = HHWIN_PROP_TRI_PANE |
    HHWIN_PROP_AUTO_SYNC;
    // Put BACK, HOME, FORWARD, and EXPAND buttons on toolbar pane.
    // NOTE: fsValidMembers - HHWIN_PARAM_TB_FLAGS must be set.
    m_hhWinType.fsToolBarFlags = HHWIN_BUTTON_BACK |
     HHWIN_BUTTON_HOME | HHWIN_BUTTON_FORWARD |
     HHWIN_BUTTON_EXPAND;
    // The file is in the right pane. The full path is not needed.
    m_hhWinType.pszFile = "intro.htm";
    // Full Paths or CHM locations of various files (if used).
    // To specify that a file is within a CHM, use the following
    // syntax: "CHMFileName.chm::FileName.xxx"
    // Home Page:

m_hhWinType.pszHome = "c:mypathintro.htm";
    // Table of Contents:
    m_hhWinType.pszToc = "c:mypathcontents.hhc";
    // Index:
    m_hhWinType.pszIndex = "c:mypathindex.hhk";
    // Expansion width of navigation pane (left pane):
    // NOTE: fsValidMembers - HHWIN_PARAM_NAV_WIDTH must be set.
    m_hhWinType.iNavWidth = 175;
    // Initial display state:
    // NOTE: fsValidMembers - HHWIN_PARAM_SHOWSTATE must be set.
    m_hhWinType.nShowState = SW_RESTORE;
    // TOC should be activated.
    // NOTE: fsValidMembers - HHWIN PARAM_CUR_TAB must be set.
    m_hhWinType.curNavType = HHWIN_NAVTYPE_TOC;
    // Tabs on top.
    // NOTE: fsValidMembers - HHWIN_PARAM_TABPOS must be set.
    m_hhWinType.tabpos = HHWIN_NAVTAB_TOP;
    // ID to use in WPARAM in WM_NOTIFY:
    m_hhWinType.idNotify = IDD_HELPTAB;
    // Title of Help Window:
    m_hhWinType.pszCaption= "My Title";
    // Indicate which fields in structure are valid.
    m_hhWinType.fsValidMembers = HHWIN_PARAM_STYLES |
    HHWIN_PARAM_PROPERTIES | HHWIN_PARAM_RECT |
    HHWIN_PARAM_TB_FLAGS | HHWIN_PARAM_NAV_WIDTH |
    HHWIN_PARAM_SHOWSTATE | HHWIN_PARAM_TABPOS |
    HHWIN_PARAM_CUR_TAB;
    // Specify the name of the window definition.
    m_hhWinType.pszType = "MyWindowName";
    // This call creates the new type from the values in
    // the HH_WINTYPE structure. This example assumes that
    // a valid CHM file, "sample.chm", exists.
    HtmlHelp(m_hWnd, "c:mypathsample.chm",
     HH_SET_WIN_TYPE, (DWORD) &m_hhWinType);
  }
  // Display the default topic in the window that was defined above
  // MFC''s CFrameWnd::OnHelp message handler.
  void CMainFrame::OnHelp()
  {
  HtmlHelp(m_hWnd, "sample.chmMyWindowName",
  HH_DISPLAY_TOPIC,0);
  }
  最后,我想在强调几点在 Visual C++ 工程中使用 HTML Help API 应注意的事项:


一、在调用 HTML Help API 的.cpp源文件中包含“Htmlhelp.h”。安装HTML Help Workshop后,文件“Htmlhelp.h”被存放在 “HTML Help Workshop”目录下的 Include 子目录中。
二、在 VC 工程中加入Htmlhelp.lib文件,以便保证编译器 link 时 API 成功输出。安装HTML Help Workshop后,文件“Htmlhelp.lib”被存放在 “HTML Help Workshop”目录的 lib 子目录中。
三、当 Building VC 工程时, 可能产生以下警告信息(如何使用 Hhctrl.lib 库文件,则不存在此问题。):
......default lib LIBCMT conflicts with use of other libs; use /NODEFAULTLIB:library.   
如果是这样的话,可以对VC的编译环境进行设置,方法是:

  在“Project”菜单中,选择 “Settings”-“Link标签”-“Category 下拉列表”-选“Input”;然后在“Ignore Libraries”编辑框输入“ LIBCMT”,这样就屏蔽(Disable)掉缺省的库搜索 (default library search),所以,如果使用了缺省库,就必须显式列出。

  经过以上的步骤 Visual C++ 工程应该能成功调用 HTML Help API。 

  由于时间关系,本文没有附带的范例程序,如果哪位读者有兴趣的话,可以做一个,届时请一定不要忘了共享一份源代码,用以填补本文的不足。我定会重谢!

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  有关HTML Help的更详细的信息,请访问 HTML Help 在线帮助站点:

http://msdn.microsoft.com/workshop/Author/htmlhelp/

来源:http://www.tulaoshi.com/n/20160219/1619321.html

延伸阅读
中午休息时,在FOX API(我常用的Win32 API浏览器)上发现了一个简单极好用的Win32API函数,是用来判断本地文件或远程机器文件是否存在的: 1. Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long 这是封装在Shell32.DLL系统文件里的一个函数,既可以判断本地文件是否存在...
环境变量设置:单击桌面我的电脑右键属性-高级-环境变量-双击Path项,添加C:MySQL5.1.40bin目录,如果要使用SDK开发,则要添加Lib和include目录到对应的Lib和include环境变量中; 环境变量设好,在开始菜单-运行-CMD,执行MySQLD,或是直接切换到C:MySQL5.1.40bin目录双击运行MySQLD.exe服务程序,也可以服务的形式运行: 注意mysql安装目录不要...
标签: windows
删除软件 你下载的软件不兼容或错误所造成的。你下载的软件为64位,不支持在32位的系统上运行。 重新下载软件 你下载的软件在下载途中损坏。此问题,是由于软件错误或不兼容所造成的,一般在换系统的时候都会这样。不管是XP还是WIN7,都容易出错。其他软件即使换了系统,不重新安装照常能用。要重装的,也会提示说重装,只有个别软件...
众 所 周 知, 在Windows95/98 的Win32 on Intel x86 体 系 中 利 用 了 处 理 器 的 三 环 保 护 模 型 中 的 零 环(Ring0, 最 高 权 限 级 别) 和 三 环(Ring3, 最 低 权 限 级 别)。 一 般 应 用 程 序 都 运 行 在Ring3 下, 受 到 严 格 的" 保 护", 只 能 规 矩 地 使 用Win32API。 如 果 我 们 想 进 行 一 些 系 ...
两个计时器API的讨论 SetTimer函数用于创建一个计时器,KillTimer函数用于销毁一个计时器。计时器属于系统资源,使用完应及时销毁。 SetTimer的函数原型如下: UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc ) ; 其中 hWnd是和timer关联的窗口句柄,此窗口必须为调用Se...

经验教程

42

收藏

85
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部