アプリケーションは、表示されるヘルプ・ボリューム内で使用されるハイパーリンクの種類だけは少なくともサポートする必要があります。一般的には、すべてのリンクの種類をサポートするようにしてください。
ハイパーリンクが選択されたときにアプリケーションに通知する場合、ハイパーリンク・コールバックをヘルプ・ダイアログに追加します。適切にハイパーリンクを処理するコールバック関数を指定しなければなりません。
次のようにしてハイパーリンク・コールバックを各ヘルプ・ダイアログに追加します。
XtAddCallback (helpDialog, DtNhyperlLinkCallback,
HyperlinkCB, (XtPointer)NULL);
helpDialog はヘルプ・ダイアログのウィジェット ID で、HyperlinkCB はハイパーリンクを処理するコールバック関数名です。
ダイアログ内で発生する可能性があるハイパーリンク・イベントを処理するための HyperlinkCB 関数を指定します。
ハイパーリンク・コールバック内で、次のコールバック構造体 (<Dt/Help.h> で宣言される) にアクセスしなければなりません。
typedef struct
{
int reason;
XEvent *event;
char *locationId;
char *helpVolume;
char *specification;
int hyperType;
int windowHint;
} DtHelpDialogCallbackStruct;
hyperType 要素は、実行されたリンクの種類を示します。その指定可能な値は、DtHELP_LINK_TOPIC、DtHELP_LINK_MAN_PAGE、DtHELP_LINK_APP_DEFINE、 DtHELP_LINK_TEXT_FILE です。別の種類に対してどの構造体要素が有効かについては、DtHelpDialog(3) のマニュアル・ページを参照してください。
windowHint 要素は、ウィンドウの種類を示します。その指定可能な値は、DtHELP_CURRENT_WINDOW、DtHELP_POPUP_WINDOW、DtHELP_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;
}