Microsoft Visual C++で過去に製作していたWinHelp(Windows Help、拡張子 *.hlp)形式のコンテキスト・ヘルプを実装したアプリケーションを、HtmlHelp(拡張子 *.chm)を用いた方式に変換する方法のメモ
■ Microsoftによる情報
Visual Studio付属のヘルプ
・既存の MFC アプリケーションへの HTML ヘルプ形式の状況依存のヘルプの追加
によれば …
1) Visual StudioでダミーのMFC, HtmlHelp対応アプリケーションを作成する
その作成したダミーアプリケーションから
2) hlpディレクトリ(に含まれる) HtmlHelpソースコード ファイルを丸ごとコピー
3) ソリューションのプロジェクトファイル *.vcproj のヘルプ関連の設定をコピー
3-1) ヘッダー ファイル設定の中で、.\Resource.h の処理設定をコピー
出力ファイルは hlp\HTMLDefines.h
3-2) HTML ヘルプ ファイル のセクションの処理設定をコピー
4) コンストラクタにEnableHtmlHelp();を記述
■ hlpディレクトリのコピーすべきファイル一覧
2012/02/14 07:29 472 HIDD_ROOT_DIALOG.htm
2012/02/14 07:29 11,093 TestApp.chm
2012/02/14 07:29 678 TestApp.hhc
2012/02/14 07:29 203 TestApp.hhk
2012/02/14 07:29 414 TestApp.hhp
■ vcprojファイル中の ヘッダー ファイル設定の中で、.\Resource.h の処理設定
Resource.h を HTMLDefines.hとTestApp.HHP に変換するコマンドがずらっと書かれている。TestApp というアプリケーションファイル名は適宜読み替えること
<Filter
Name="ヘッダー ファイル"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}">
<File
RelativePath=".\Resource.h">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="ヘルプ コンパイラ用のマップ ファイルを生成しています..."
CommandLine="echo // 生成されたマップ ファイルです。次で使用されます。TestApp.HHP. > "hlp\HTMLDefines.h"
echo. > "hlp\HTMLDefines.h"
echo // コマンド (ID_* and IDM_*) >> "hlp\HTMLDefines.h"
makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // プロンプト (IDP_*) >> "hlp\HTMLDefines.h"
makehm /h IDP_,HIDP_,0x30000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // リソース (IDR_*) >> "hlp\HTMLDefines.h"
makehm /h IDR_,HIDR_,0x20000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // ダイアログ (IDD_*) >> "hlp\HTMLDefines.h"
makehm /h IDD_,HIDD_,0x20000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // フレーム コントロール (IDW_*) >> "hlp\HTMLDefines.h"
makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
"
Outputs="hlp\HTMLDefines.h"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCustomBuildTool"
Description="ヘルプ コンパイラ用のマップ ファイルを生成しています..."
CommandLine="echo // 生成されたマップ ファイルです。次で使用されます。TestApp.HHP. > "hlp\HTMLDefines.h"
echo. > "hlp\HTMLDefines.h"
echo // コマンド (ID_* and IDM_*) >> "hlp\HTMLDefines.h"
makehm /h ID_,HID_,0x10000 IDM_,HIDM_,0x10000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // プロンプト (IDP_*) >> "hlp\HTMLDefines.h"
makehm /h IDP_,HIDP_,0x30000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // リソース (IDR_*) >> "hlp\HTMLDefines.h"
makehm /h IDR_,HIDR_,0x20000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // ダイアログ (IDD_*) >> "hlp\HTMLDefines.h"
makehm /h IDD_,HIDD_,0x20000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
echo. >> "hlp\HTMLDefines.h"
echo // フレーム コントロール (IDW_*) >> "hlp\HTMLDefines.h"
makehm /h /a afxhh.h IDW_,HIDW_,0x50000 "$(InputFileName)" >> "hlp\HTMLDefines.h"
"
Outputs="hlp\HTMLDefines.h"/>
</FileConfiguration>
</File>
<File
RelativePath=".\stdafx.h">
</File>
<File
RelativePath=".\TestApp.h">
</File>
<File
RelativePath=".\TestAppDlg.h">
</File>
</Filter>
■ vcprojファイル中の ヘッダー ファイル設定の中で、ヘルプファイルの処理設定
<Filter
Name="HTML ヘルプ ファイル"
Filter="hhp;hhc;hhk;gif;jpg">
<File
RelativePath=".\hlp\TestApp.hhc">
</File>
<File
RelativePath=".\hlp\TestApp.hhk">
</File>
<File
RelativePath=".\hlp\TestApp.hhp">
<FileConfiguration
Name="Debug|Win32">
<Tool
Name="VCCustomBuildTool"
Description="ヘルプ ファイルを作成しています..."
CommandLine="start /wait hhc "hlp\TestApp.hhp"
if not exist "hlp\TestApp.chm" goto :HelpError
copy "hlp\TestApp.chm" "$(OutDir)\TestApp.chm"
goto :HelpDone
:HelpError
echo hlp\TestApp.hhp(1) : error:ヘルプ ファイルを作成中に問題が発生しました。
echo.
:HelpDone
echo.
"
AdditionalDependencies="hlp\HTMLDefines.h"
Outputs="$(OutDir)\$(ProjectName).chm"/>
</FileConfiguration>
<FileConfiguration
Name="Release|Win32">
<Tool
Name="VCCustomBuildTool"
Description="ヘルプ ファイルを作成しています..."
CommandLine="start /wait hhc "hlp\TestApp.hhp"
if not exist "hlp\TestApp.chm" goto :HelpError
copy "hlp\TestApp.chm" "$(OutDir)\TestApp.chm"
goto :HelpDone
:HelpError
echo hlp\TestApp.hhp(1) : error:ヘルプ ファイルを作成中に問題が発生しました。
echo.
:HelpDone
echo.
"
AdditionalDependencies="hlp\HTMLDefines.h"
Outputs="$(OutDir)\$(ProjectName).chm"/>
</FileConfiguration>
</File>
</Filter>
<Filter
Name="HTML ヘルプ トピック"
Filter="htm;html">
<File
RelativePath=".\hlp\HIDD_ROOT_DIALOG.htm"
DeploymentContent="TRUE">
</File>
</Filter>
<File
RelativePath=".\ReadMe.txt">
</File>
<File
RelativePath=".\res\TestApp.manifest">
</File>
■ コンストラクタにEnableHtmlHelp();を記述
// CTestAppApp コンストラクション
CTestAppApp::CTestAppApp()
{
EnableHtmlHelp();
// TODO: この位置に構築用コードを追加してください。
// ここに InitInstance 中の重要な初期化処理をすべて記述してください。
}
■ ヘルプ プロジェクト ファイルのメッセージマップを必要により追加
[OPTIONS]
Compatibility=1.1 or later
Compiled file=TestApp.chm
Contents file=TestApp.hhc
Index file=TestApp.hhk
Default Window=WndMain
Default topic=index.html
Display compile progress=No
Language=0x411 日本語
[FILES]
HIDD_ROOT_DIALOG.htm
001-page.html
002-page.html
[ALIAS]
HIDD_COMPDEL_DIALOG=HIDD_ROOT_DIALOG.htm
HIDD_DLG_001_PAGE=001-page.html
HIDD_DLG_002_PAGE=002-page.html
[MAP]
#include HTMLDefines.h
[INFOTYPES]