程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 如何用Win32 SDK編程創建Tri-pane HTML Help窗口

如何用Win32 SDK編程創建Tri-pane HTML Help窗口

編輯:關於VC++

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:\\mypath\\intro.htm";
    // Table of Contents:
    m_hhWinType.pszToc = "c:\\mypath\\contents.hhc";
     // Index:
    m_hhWinType.pszIndex = "c:\\mypath\\index.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:\\mypath\\sample.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。

由於時間關系,本文沒有附帶的范例程序,如果哪位讀者有興趣的話,可以做一個,屆時請一定不要 忘了共享一份源代碼,用以填補本文的不足。我定會重謝!

有關HTML Help的更詳細的信息,請訪問 HTML Help 在線幫助站 點:

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved