[F1]キーを押したときにヘルプを起動させるには?

[戻る]
AKKI [E-Mail] [HomePage] 2001/10/01(月) 13:44:57
すいません。またまた質問させていただきます。

今、ヘルプファイルを作成しているのですが、[F1]キーを押したときに起動できるようにしたいのです。
今のところ、[F1]キーを押したときにヘルプだけは起動するのですが、トピックが見つかりませんという
エラーが出てきます。

onHelp()の中にAfxGetApp()->WinHelp()を記述するだけではだめなのでしょうか?
どなたか、アプリケーションとヘルプを連動(?)させる方法を教えてください。

ku 2001/10/01(月) 14:05:38
WindowsAPIのWinHelpのヘルプのuCommandを見てください
その値をCWinApp::WinHelp()ならnCmdにuCommandを指定してください

デフォルトではnCmd = HELP_CONTEXTなので
表示したいトピック(ページ)のコンテキスト番号を指定しないといけません
ヘルプを作成したときに値を指定したか〜.hを作成してくれたのでは
ないかと思いますので、それを利用すれば問題ないです

AfxGetApp()->WinHelp(0, HELP_FINDER);
なんてやる方法もありますけどね

AKKI [E-Mail] [HomePage] 2001/10/01(月) 14:58:49
すいません。言葉足らずでした。

私が知りたかったのは、WinHelpよりむしろコンテキスト番号(マップID)をどのように取得し、どのように
ヘルプファイルに渡すかということです。

例えば、[ファイル]-[開く]にカーソルを合わせて、[F1]キーを押すと、ヘルプが立ち上がり、
その中の[ファイル]-[開く]が開いて欲しいのですが・・・。
今のプログラムだと[ファイル]-[開く]が立ち上がらずに指定したページが立ち上がります。

上の方法試して見ましたが無理でした。
もしかしたらヘルプファイルの方に問題があるんでしょうかねぇ。

ku 2001/10/01(月) 15:18:48
> 私が知りたかったのは、WinHelpよりむしろコンテキスト番号(マップID)をどのように取得し、どのように
> ヘルプファイルに渡すかということです。
これはヘルプファイルを作成するときにツールによっては
1.直値を指定する
2.IDの定義名を指定する
のでは無いかと思います

1.が直値ならその値をプログラムに埋め込めば良いと思います
2.が直値も指定するならその値をプログラムに埋め込んでもいいと思います
 定義名の〜.hがあるのならそれをインクルードして使用した方が良いでしょう
2.で値を設定しない場合は、〜.hを作成してくれるかそれに近いものを
 作成してくれるのではないかと思います(僕が使用したのはこのタイプのものです)

> 例えば、[ファイル]-[開く]にカーソルを合わせて、[F1]キーを押すと、ヘルプが立ち上がり、
> その中の[ファイル]-[開く]が開いて欲しいのですが・・・。
> 今のプログラムだと[ファイル]-[開く]が立ち上がらずに指定したページが立ち上がります。
状況依存ヘルプとかだと指定の方法があるのかもしれませんが(やった事ないので知らないです)
僕の場合は共通関数を作り
OnFileOpen([ファイル]-[開く]が押されたときのイベント)
{
    CommonHelp(ID_FILEOPEN_HELP_ID);
}
OnFileClose([ファイル]-[閉じる]が押されたときのイベント)
{
    CommonHelp(ID_FILECLOSE_HELP_ID);
}
void CommonHelp(int nID)
{
    AfxGetApp()->WinHelp(nID, HELP_CONTEXT);
}
などとやって、ヘルプツールが作ってくれたヘッダファイルをインクルードして使用してます

おまけ
〜.hlpと〜.cntがありますか?
あればHELP_FINDERが使えるんだけど〜.hlpだけならHELP_FINDERは
無効かもしれません

AKKI [E-Mail] [HomePage] 2001/10/01(月) 15:54:17
hlpとcntはあります。
でも、HELP_FINDERの使い方が分かりません・・・。

それから、すみませんが[ファイル]-[開く]の件は、メニューを選択せずに、[F1]キーを
押すということなのですが・・・。

VC++を使用する際、例えば WinHelp()と記述してその部分を選択して、[F1]を押すと、
MSDNライブラリが立ち上がり、WinHelp()という項目が開きます。

私が作りたいのもそういうことです。

知識不足なもので、いろいろご迷惑かけてすみません。

ku 2001/10/01(月) 18:06:11
> hlpとcntはあります。
> でも、HELP_FINDERの使い方が分かりません・・・。
CWinApp::WinHelpのページのnCmdの説明を読むと「WinHelp」を参照してください
と僕のヘルプには書いてあります
そこをクリックしましょう
ただしAKKIさんのやりたいこととは違うように思えました

> VC++を使用する際、例えば WinHelp()と記述してその部分を選択して、[F1]を押すと、
> MSDNライブラリが立ち上がり、WinHelp()という項目が開きます。
MFCをお使いなんですよね?
VSのようなということは、エディット画面があって、そのエディット画面の文字列を
選択してF1を押すとそれに合ったヘルプを出すということですか?
たぶんそんな機能は付いてません
::WinHelp(AfxGetMainWnd()->GetSafeHwnd(), "E:\\abc.HLP", HELP_KEY, (LPARAM)"WinHelp");
こんな感じにもっていければ、うまくいくと思うよ

古いスレッドには追加発言できません。