アプリケーションからの呼び出し方(1)


ヘルプはアプリケーションに付属するものですから、アプリケーションの表示の仕方によってその実装方法が異なってきます。 しかし、実際のWindowsアプリケーションは、ヘルプの表示の面から言うと次の4つのパターンしか持っていません。

  1. メインウィンドウとダイアログボックスを持つもの。
  2. メインウィンドウだけあるもの。
  3. ダイアログボックスだけあるもの。
  4. 通常のウィンドウを表示しないもの。

Windowsアプリケーションの表示ウィンドウを大別すると、メインウィンドウとダイアログボックスがあります。 ここでいう、メインウィンドウとは、アプリケーションを起動したときに表示されるフレームを持ったウィンドウで、メニューやボタンと真ん中にクライアントエリアと呼ばれるデータ表示エリアを持つものです。 ほとんどの場合、ウィンドウサイズの変更が可能で、大雑把にビューウィンドウとも呼ばれています。 ワープロソフトで言えば文章を表示しているウィンドウのことです。 

ダイアログボックスとは、通常固定サイズのウィンドウで、ボタンなどのコントロールがいくつか付いており、メインウィンドウや他のダイアログボックスから呼ばれるウィンドウです。 メニューを持っているものもあります。 ワープロソフトで言えば、文章ファイルを読み込んだり、保存したりするときに使用するファイル選択の画面です。 ダイアログボックスにはその動作により、モードレスダイアログボックス、モーダルダイアログボックス、システムモーダルダイアログボックスがありますがここでは関係ありませんので説明は省略致します。

いずれにせよ、ヘルプが呼び出されるウィンドウは、メインウィンドウかダイアログボックスです。 ウィンドウがないものは、HTML HELPを単独で使用する事になるでしょう。

ここで何故、ウィンドウを分類したかというと、、メインウィンドウとダイアログボックスでは、HTML HELPの呼び出し方が異なるからです。

メインウィンドウでは、HTMLヘルプ単体で使用する呼び出され方に近い方法です。

以下の3例は、メインウィンドウにおけるHTML HELPの呼び出し方の典型的なものです。
通常アプリケーションには、「ヘルプ」メニューのサブメニューとして「目次」、「検索」と「キーワード」があります。 それぞれのサブメニューに応じたイベント ハンドラとして、HTML HELP の表示タブを変更するコードを下記に示します。


■例1. ヘルプの目次表示を行います。 HtmlHelp関数の第2パラメータを"TestApp.chm::/xxxx.htm" とすると特定の ページをトップページにすることができます。


//============================================================================
// ヘルプの目次表示
//============================================================================
void CMainFrame::OnHelpIndex()
{
    HWND hwnd;
    // CString sHelpFile(theApp.getHtmlHelpFile()); 通常はヘルプファイル名をここから取ってくる。
    hwnd=HtmlHelp(NULL, "TestApp.chm", HH_DISPLAY_TOPIC, 0);
    if( hwnd==NULL ) {
        AfxMessageBox( _T("HTML HELP(TestApp.chm)を開くことができません。"));
    }
}



■例2.HtmlHelp関数の第4パラメータにキーワードの指定もできますが、 そのキーワードを持ち込むコードが必要です。 クリップボードからキーワードを取り出すルーチン等を実装しますが、その内容は範囲を超えますので省略します。

//============================================================================
// キーワード検索の表示
//============================================================================
void CMainFrame::OnHelpFinder() 
{
    HWND hwnd;
    hwnd=HtmlHelp(NULL, "TestApp.chm", HH_DISPLAY_INDEX,0 );
   if( hwnd==NULL ) {
        AfxMessageBox( _T("HTML HELP(TestApp.chm)を開くことができません。"));
   }
}


■例3.フルテキストサーチ(検索タブ)の場合は、少し複雑です。 HtmlHelp関数を呼び出す前に、 構造体HH_FTS_QUERY を設定しなければなりません。この構造体はHtmlHelp関数の第4パラメータに指定します。 事前に検索条件をプログラム側で指定したい場合は、構造体のメンバの中に指定します。 キーワードと同じく検索条件 を取り出すルーチン等を実装する必要があります。

//============================================================================
// フルテキストサーチ(検索タブ)を前面に表示
//============================================================================
void CMainFrame::OnHelpFullTextSearch() 
{
    HWND hwnd;
    HH_FTS_QUERY q ;
    q.cbStruct = sizeof (HH_FTS_QUERY);
    q.fUniCodeStrings=FALSE;
    q.pszSearchQuery="";;
    q.iProximity=0;
    q.fStemmedSearch=FALSE;
    q.fTitleOnly=FALSE;
    q.fExecute=TRUE;
    q.pszWindow="";

    CString sHelpFile(theApp.getHtmlHelpFile());
    hwnd=HtmlHelp(::GetDesktopWindow(), sHelpFile, HH_DISPLAY_SEARCH, (DWORD)&q);
    if( hwnd==NULL ) {
                AfxMessageBox( _T("HTML HELP(TestApp.chm)を開くことができません。") );
    }
}

次頁へ  前頁へ


四方山情報のトップへ 初級へ 中級へ

Copyright (C) 2004 T.Ichida All rights reserved.
無断転載を禁止します