![]()
4. 特殊な呼び出し方法
マージしたヘルプをプログラムから呼び出すとき、ただ単純に
API を使用しても自分より上位のヘルプがある場合にはその目次をマージすることはできません。
b.chm の index.htm を呼び出したいとき Html
Api は次のように記述すれば表示はできます。
| HtmlHelp(::GetDesktopwindow(), b.chm::/index.htm, HH_DISPLAY_TOC, NULL) ; |
この方法では b.chm の index.htm は表示されますが、その上位の
a.chm の目次は表示されません。これは、b.chm
はどのファイルからマージされているかはわからないためです。
では、これを解決するにはどうするかというと
A-Link 用のコマンドを用います。
| HWND h_wnd | |
| HH_AKLINK link; | |
| link.cbStruct = sizeof(HH_AKLINK); | |
| link.fReserved = FALSE; | |
| link.pszKeywords = NULL; | |
| link.pszUrl = "ms-its:b.chm::/index.htm"; | |
| link.pszMsgText = NULL; | |
| link.pszMsgTitle = NULL; | |
| link.pszWindow = NULL; | |
| link.fIndexOnFail = FALSE; | |
| h_wnd = HtmlHelp(::GetDesktopWindow(), "a.chm", HH_KEYWORD_LOOKUP, (DWORD) &link); |
この記述なら問題なく目次には a.chm 以下が表示され、ウインドウには b.chm の index.htm の内容が表示されます。ですが、ここにも問題はあります。ヘルプを作成するとき目次と内容を連動する様に設定してあるときでも、目次の内容は a.chm を起動したときと同様な表示となりツリーは同期しません。同期しない設定になっているときはこれでも問題はありませんが、同期しているとき、もしくはそのときだけでもその項目を目次内で表示して欲しいときは次の API を使用します。
| HtmlHelp(hd, "a.chm", HH_SYNC, (DWORD)"b.chm::/index.htm"); |
これでちゃんと表示されるはずです。ですが、これも問題はあります。同じファイルが違うところにマージされていた場合には、最初にマージされているところにヒットしてしまいます。これには回避方法がありませんのでしょうがないでしょう。