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

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

  使用 HTML Help Workshop 创建窗口

  使用 HTML Help API 编程创建窗口

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

  使用预定义窗口

  在 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.htm>mywindow",

  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.chm>MyWindowName",

  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。

时间: 2024-08-03 03:26:41

如何用 Win32 SDK 编程创建Tri-pane HTML Help 窗口的相关文章

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

HTML Help使用户能在一个帮助窗口中使用工具棒.查看目录和帮助主题.目前,有两种方法创建Tri-pane类型的HTML Help窗口: 使用HTML Help Workshop创建窗口 使用HTML Help API编程创建窗口 本文将介绍如何使用这两种方法创建Tri-pane HTML Help窗口. 使用预定义窗口 在HTML Help Workshop环境中很容易创建和修改工程的窗口定义,有关窗口定义的其它信息,请参考微软知识库文章:Q189084 HOWTO: Create a T

win32 sdk 如何创建webbrown控件

问题描述 win32 sdk 如何创建webbrown控件 win32 sdk 如何创建webbrown控件 解决方案 01.HMODULE hRichEditDll = NULL; 02. 03.WM_CREATE: 04.{ 05. hRichEditDll = LoadLibrary(_T("RICHED20.dll")); 06. HWND hRichEdit = CreateWindowEx(WS_EX_CLIENTEDGE, 07. _T("RichEdit20W

线程-关于Win32核心编程中DLL注入后无反应的解决办法

问题描述 关于Win32核心编程中DLL注入后无反应的解决办法 #include #include HINSTANCE hProcess; PWSTR pszLibFileRemote; HINSTANCE hThread; void StartInject(int ProcessID, char * DllName); void OverInject(char * DllName); void EnableDebugPrivilege(HANDLE processHandle); int ma

图像采集-如何用C语言编程保存mikrotron高速相机拍的照片

问题描述 如何用C语言编程保存mikrotron高速相机拍的照片 买了一个mikrotron高速相机,CoaXPress相机和图像采集卡 相机现在已经能拍照了 如何用C语言编程,要求把相机拍到的相片存到到电脑,再让照片快速浏览, 相机带有一个sdk v01.03.05开发包,但我不知道怎么用 有没有哪位大神能帮帮忙,谢谢了QQ2583392947@qq.com 完成之后还有重谢

怎么建win32 sdk模版?

问题描述 怎么建win32 sdk模版? 看网上有视频作者,他们自己做了sdk模版,我找了好久没找到方法,全是C#的. 解决方案 WIN32 SDK界面编程

acl-如何用C++ winsock 编程在服务器端实现访问控制,例如允许某IP访问网络、禁止访问网络

问题描述 如何用C++ winsock 编程在服务器端实现访问控制,例如允许某IP访问网络.禁止访问网络 如题 想在服务器端跑winsock,来模拟路由器的禁止访问.允许访问的功能, 不知道该如何做,思路我有,但是我找不到具体的API或者源码,求指点主要函数以及参考文档 解决方案 winsock没有这个功能,需要用raw socket,因为你这个需要在ip层处理. 解决方案二: 可以参考各种proxy的实现,比如apche等,然后自己获取IP地址等来做策略 解决方案三: 使用 winsock 只

objective c-通过编程创建多个复选框

问题描述 通过编程创建多个复选框 在UIViewController中有一个UITextView,要对UITextView插入多个复选框. 怎么创建多个复选框,并且对这些复选框动态的创建方法? 目前代码如下: -(void)Check { CGPoint origin = note.frame.origin; NSString* head = [note.text substringToIndex:note.selectedRange.location]; CGSize initialSize

求助 linux 编程 创建服务器

问题描述 求助 linux 编程 创建服务器 创建一个服务器 让多个终端连接并交互信息 最后用SIGUSR1关闭连接 用SIGUSR2记录连接终端的个数 解决方案 <linux高性能服务器编程>读书笔记linux网络编程多进程并发服务器Linux select TCP并发服务器与客户端编程

如何用C#阻止外部程序创建窗口句柄

问题描述 如何用C#阻止外部程序创建窗口句柄我用c#调用API的去隐藏指定窗口,但隐藏后改程序的窗口会自动创建.如何阻止它创建窗口?谢谢! 解决方案 解决方案二:sf,消灭0回复