Home

Microsoft HTML Help Workshop の使い方



目次の作成
  1. HTMLでヘルプを作成する
  2. [File] → [New] → [Project]を選択して[OK] → [次へ] → [Browse]を押し、[ファイルを開く]ダイアログで、HTMLのフォルダに移動後、[ファイル名(N):]にプロジェクト名(任意)を記入して[OK] → [次へ] → [完了]
  3. [Add/Remove topic files] を押す → ヘルプに使うHTMLファイルを全て[Add]を押して追加し[OK]
  4. 「Change project options] を押す → [General]タブで[Title:]にタイトルを、[Default file:]に最初に表示されるHTMLファイルを選択する → [OK]
  5. [Contents]タブ → [Create a new contents file]を選択して[OK] → コンテンツファイル名(任意)を記入して[OK]
  6. [Insert a page] を押す → [General]タブで、[Entry Title:]にHTMLのタイトルを記入し、[Add...]を押して、そのタイトルのHTMLファイルを選択する → [OK]
  7. 6 の作業を、全てのHTMLファイルについて行う
  8. 修正は[Edit selection] で、順番の入れ替えは[Move selection up / down] で、削除は[Delete selection] で行う
  9. 全て追加し終わったら、[Project]タブ → [Save all files and compile] を押す


[検索]タブと[お気に入り]タブの追加とウィンドウサイズの設定
  1. [Project]タブ → [Add/Modify Window Definitions] を押す → WindowStyle1など適当にウィンドウ名を記入する(作成されるヘルプファイルには表示されない) → [OK]
  2. [Position]タブで[Autosizer]を押し、ウィンドウ全体の位置とサイズを指定する
  3. [Navigation Pane]タブの[Navigation pane width:]に左側の子ウィンドウの横幅を指定する
  4. [Navigation Pane]タブの[Tabs]の[Search tab]にチェックを入れると[検索]タブが追加され、[Favorites tab]にチェックを入れると「お気に入り」タブが追加される
  5. [Search tab]にチェックを入れた場合 → [次へ] → [Search tab]と[Compile full-text information]にチェック → [次へ] → [完了] → [OK]
  6. [Project]タブ → [Save all files and compile] を押す


[キーワード]タブの追加
  1. [Index]タブ → [Create a new index file]を選択して[OK] → インデックスファイル名(任意)を記入して[OK]
  2. [Insert a keyword] を押す → [General]タブで、[Keyword:]にキーワードを記入し、[Add...]を押して、そのキーワードにリンクするHTMLファイルを選択する → [OK]
  3. [keyword:]にキーワードを記入し、[Add...]を押してリンクするファイルのURLを選択する
  4. ウィンドウ名を既に付けている場合は、[Project]タブ → [Add/Modify Window Definitions] を押す → [Files]タブ → [Index:]でインデックスファイルを選択して[OK]
  5. KLink キーワードを HTML ファイルに追加した場合は、「Change project options] を押す → [Files]タブ → [Include keywords from HTML files]にチェックする
  6. [Save all files and compile] を押す


[補足] KLink キーワードを HTML ファイルに追加するには
  1. HTML ファイルを開きます。
  2. ファイル内の開始と終了の <BODY> タグの間で、キーワードを追加する場所にカーソルを置きます。
  3. [Edit] メニューの [Compiler Information] をクリックし、[Keywords] タブをクリックします。
  4. [Add] ボタンをクリックし、ファイルに挿入するキーワードを指定します。複数のキーワードを追加する場合は、セミコロンで区切ります。


Visual C++ サンプルコード
  #include <windows.h>
  #include "htmlhelp.h"
  #pragma comment(lib, "htmlhelp.lib")
  
  DWORD g_dwCookie;
  
  CALLBACK ProcWnd()
  {
    static char pathHelp[MAX_PATH];
    
    switch(uMsg)
    {
    case WM_CREATE:
      {
        GetModuleFileName(NULL, pathHelp, sizeof(pathHelp));
        char *p = strrchr(pathHelp, '\\');
        if(p)
          strcpy(p, "\\help.chm");
      }
      return 0;
    case WM_COMMAND:
      switch(LOWORD(wParam))
      {
      case IDM_HELP:           // ヘルプ(以前開いたタブ)
        HtmlHelp(NULL, pathHelp, HH_DISPLAY_TOPIC, 0);
        return 0;
      case IDM_HELP_CONTENTS:  // ヘルプ(目次)
        HtmlHelp(NULL, pathHelp, HH_DISPLAY_TOC, 0);
        return 0;
      case IDM_HELP_INDEX:     // ヘルプ(キーワード)
        HtmlHelp(NULL, pathHelp, HH_DISPLAY_INDEX, (LPARAM)"");
        return 0;
      case IDM_HELP_SEARCH:    // ヘルプ(検索)
        {
          HH_FTS_QUERY q;
          ZeroMemory(&q, sizeof(HH_FTS_QUERY));
          q.cbStruct = sizeof(HH_FTS_QUERY);
          HtmlHelp(NULL, pathHelp, HH_DISPLAY_SEARCH, (LPARAM)&q);
        }
        return 0;
      }
      return 0;
    case WM_CLOSE:
      HtmlHelp(NULL, NULL, HH_CLOSE_ALL, 0);
      HtmlHelp(NULL, NULL, HH_UNINITIALIZE, g_dwCookie);
      DestroyWindow(hWnd);
      PostQuitMessage(0);
      return 0;
    }
    return DefWindowProc();
  }
  
  WinMain()
  {
    CreateWindow();
    HtmlHelp(NULL, NULL, HH_INITIALIZE, g_dwCookie);
    while (GetMessage(&msg, NULL, 0, 0))
    {
      if(HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&msg))
        continue;
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    return msg.wParam;
  }
  


状況依存ヘルプ Download
  1. テキスト エディタで以下のような内容の .txt ファイルを作成する(ファイル名は任意、以下のサンプルコードでは、ctrl_help.txt)

    .topic 1
    ボタンです
    .topic 2
    スライダーです
    .topic 3
    チェックボックスです

  2. HTML Help Workshop でプロジェクトを新規作成し、[Project]タブで[HTML API information] を押す
  3. [Text Pop-ups]タブ → [Text file...] → [Browse...]ボタンを押して、上で作成したテキストファイルを選択する → [OK] → [OK]
  4. [Project]タブ → [Save all files and compile] を押す

Visual C++ 状況依存ヘルプのサンプルコード
  #include <windows.h>
  #include "htmlhelp.h"
  #include "resource.h"
  #pragma comment(lib, "htmlhelp.lib")
  
  DWORD g_dwCookie;
  
  CALLBACK ProcDlg()
  {
    static DWORD helplist[] = {IDC_BUTTON1,1,
                               IDC_SLIDER1,2,
                               IDC_CHECK1,3,
                               IDC_CHECK2,-1,  // 不要の場合は-1
                               0,0};           // 最後は必ず0
    static char	pathHelp[MAX_PATH];
    
    switch(uMsg)
    {
    case WM_INITDIALOG:
      {
        GetModuleFileName(NULL, pathHelp, sizeof(pathHelp));
        char *p = strrchr(pathHelp, '\\');
        if(p)
          strcpy(p, "\\help.chm::/ctrl_help.txt");
      }
      break;
    case WM_CONTEXTMENU:  // 右クリックの場合
      {
        HWND hWnd = (HWND) wParam;
        if(GetDlgCtrlID(hWnd) > 0){
          HtmlHelp(hWnd, pathHelp,
                   HH_TP_HELP_CONTEXTMENU, (DWORD)helplist);
        }
      }
      break;
    case WM_HELP:         // [F1]キーが押された場合
      {
        LPHELPINFO lphi = (LPHELPINFO) lParam;
        if(lphi->iContextType == HELPINFO_WINDOW){
        HWND hWnd = (HWND)lphi->hItemHandle;
        if(GetDlgCtrlID(hWnd) > 0){
          return HtmlHelp(hWnd, pathHelp,
                      HH_TP_HELP_WM_HELP, (DWORD)helplist) != NULL;
        }
      }
      break;
    case WM_COMMAND:
      switch(LOWORD(wParam))
      {
      case IDOK:
        SendMessage(hDlg,WM_CLOSE,0,0);
        break;
      case IDCANCEL:
        SendMessage(hDlg,WM_CLOSE,0,0);
        break;
      default:
        return FALSE;
      }
      break;
    case WM_CLOSE:
      HtmlHelp(NULL, NULL, HH_UNINITIALIZE, g_dwCookie);
      DestroyWindow(hDlg);
      PostQuitMessage(0);
      break;
    default:
      return FALSE;
    }
    return TRUE;
  }
  
  WinMain()
  {
    HWND hDlg = CreateDialog(hInst, MAKEINTRESOURCE(IDD_DIALOG1),
                             NULL, DlgProc);
    ShowWindow(hDlg, nCmdShow);
    HtmlHelp(NULL, NULL, HH_INITIALIZE, g_dwCookie);
    while (GetMessage(&msg, NULL, 0, 0))
    {
      if(IsDialogMessage(hDlg, &msg))
        continue;
      if(HtmlHelp(NULL, NULL, HH_PRETRANSLATEMESSAGE, (DWORD)&msg))
        continue;
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
    return msg.wParam;
  }
  


デコンパイル

CHMファイルをデコンパイルすると、作成に使われたHTMLやHHCファイルなどを復元できる
  1. [File] メニューの [Decompile] をクリックします。
  2. [Destination folder] テキスト ボックスに、復元先のフォルダ名を入力します。
  3. [Compiled help file] テキスト ボックスにデコンパイルするヘルプ (.chm) ファイル名を入力します。