共通デスクトップ環境 プログラマーズ・ガイド (ヘルプ・システム編)

ハイパーリンク・コールバックを指定するには

  1. 次のようにしてハイパーリンク・コールバックを各ヘルプ・ダイアログに追加します。

    XtAddCallback (helpDialog, DtNhyperlLinkCallback,
                    HyperlinkCB, (XtPointer)NULL);

    helpDialog はヘルプ・ダイアログのウィジェット ID で、HyperlinkCB はハイパーリンクを処理するコールバック関数名です。

  2. ダイアログ内で発生する可能性があるハイパーリンク・イベントを処理するための HyperlinkCB 関数を指定します。

ハイパーリンク・コールバック内で、次のコールバック構造体 (<Dt/Help.h> で宣言される) にアクセスしなければなりません。

typedef struct
 	{
		int      reason;
		XEvent  *event;
		char    *locationId; 
		char    *helpVolume;
		char    *specification;
		int      hyperType;
		int      windowHint;
} DtHelpDialogCallbackStruct;

hyperType 要素は、実行されたリンクの種類を示します。その指定可能な値は、DtHELP_LINK_TOPICDtHELP_LINK_MAN_PAGEDtHELP_LINK_APP_DEFINEDtHELP_LINK_TEXT_FILE です。別の種類に対してどの構造体要素が有効かについては、DtHelpDialog(3) のマニュアル・ページを参照してください。

windowHint 要素は、ウィンドウの種類を示します。その指定可能な値は、DtHELP_CURRENT_WINDOWDtHELP_POPUP_WINDOWDtHELP_NEW_WNIDOW です。

次の関数 HyperlinkCB() は、ハイパーリンク・コールバックを処理するために必要な一般構造体を示しています。

XtCallbackProc
HyperlinkCB (widget, clientData, callData)
      Widget     widget;
      XtPointer  clientData;
      XtPointer  callData;
   {
      DtHelpDialogCallbackStruct *hyperData =
         (DtHelpDialogCallbackStruct *) callData;
      switch ((int)hyperData-> hyperType)
         {
            case DtHELP_LINK_TOPIC:
              /* Handles  "jump new view"hyperlinks. */
              break;
            case DtHELP_LINK_MAN_PAGE:
              /* Handles  "man page" hyperlinks. */
              break;
            case DtHELP_LINK_APP_DEFINE:
              /* Handles ``application-defined" hyperlinks. */
              break;
            case DtHELP_LINK_TEXT_FILE:
              /* Handles ``text file" hyperlinks. */
              break;
            default:
              break;
    }